main.py aktualisiert

This commit is contained in:
2026-07-30 16:34:13 +00:00
parent a3abe587cf
commit 2c3f7605d3
+85 -77
View File
@@ -1,11 +1,21 @@
import requests
import customtkinter as ctk
import threading import threading
import json import json
import os import os
import webbrowser import webbrowser
import subprocess
import sys
try:
import customtkinter as ctk
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "customtkinter"])
import customtkinter as ctk
try:
import requests
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "requests"])
import requests
app = ctk.CTk() app = ctk.CTk()
@@ -196,7 +206,7 @@ def openAPIPopup():
APIlabel = ctk.CTkLabel(popup, text="Enter your API key:") APIlabel = ctk.CTkLabel(popup, text="Enter your API key:")
APIlabel.pack(pady=(15, 5)) APIlabel.pack(pady=(15, 5))
APIKeyGet = ctk.CTkLabel(popup, text="How to get free API key", text_color="#3366d6", cursor="hand2") APIKeyGet = ctk.CTkLabel(popup, text="How to get free API key", text_color="#3366d6", cursor="hand2", font=("Arial", 12, "underline"))
APIKeyGet.bind("<Button-1>", openWeatherLink) APIKeyGet.bind("<Button-1>", openWeatherLink)
APIKeyGet.pack(pady=5) APIKeyGet.pack(pady=5)
@@ -262,80 +272,6 @@ def openAPIPopup():
safeAPI = ctk.CTkButton(popup, text="Safe API key", command=getAPIkey) safeAPI = ctk.CTkButton(popup, text="Safe API key", command=getAPIkey)
safeAPI.pack(pady=10) safeAPI.pack(pady=10)
if not APIKey:
app.after(500, openAPIPopup)
searchPage.pack(fill="both", expand=True)
searchPage.pack(pady=200)
searchFrame = ctk.CTkFrame(searchPage, width=500)
searchFrame.pack(pady=30, anchor="center")
searchLabel = ctk.CTkLabel(searchFrame, text="Which city do you want to know the weather?", font=("Arial", 30))
searchLabel.pack(pady=5, padx=15)
cityEntry = ctk.CTkEntry(searchPage, placeholder_text="Enter City", font=("Arial", 22, "bold"), width=800, height=70)
cityEntry.pack(pady=10, anchor="center")
cityEntry.bind("<Return>", lambda event: doSearch())
resultTitle = ctk.CTkLabel(resultPage, text="Weather: ", font=("Arial", 60, "bold"))
resultTitle.pack(pady=20)
###################################################
#### WEATHER FRAMES ####
###################################################
cardsFrame = ctk.CTkFrame(resultPage, fg_color="transparent")
cardsFrame.pack(fill="both", expand=True, padx=20, pady=20)
weatherTempFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherTempFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherTempFrame.pack_propagate(False)
weatherTempTitle = ctk.CTkLabel(weatherTempFrame, text="Temperature", font=("Arial", 45, "bold"))
weatherTempTitle.pack(expand=True, fill="both", pady=(20,10))
weatherTempLabel = ctk.CTkLabel(weatherTempFrame, font=("Arial", 25))
weatherTempLabel.pack(expand=True, anchor="n")
weatherGeneralFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherGeneralFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherGeneralFrame.pack_propagate(False)
weatherGeneralTitle = ctk.CTkLabel(weatherGeneralFrame, text="General:", font=("Arial", 45, "bold"))
weatherGeneralTitle.pack(expand=True, fill="both", pady=(20,10))
weatherGeneralLabel = ctk.CTkLabel(weatherGeneralFrame, font=("Arial", 25))
weatherGeneralLabel.pack(expand=True, anchor = "n")
weatherWindFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherWindFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherWindFrame.pack_propagate(False)
weatherWindTitle = ctk.CTkLabel(weatherWindFrame, text="Wind", font=("Arial", 45, "bold"))
weatherWindTitle.pack(expand=True, fill="both", pady=(20,10))
weatherWindLabel = ctk.CTkLabel(weatherWindFrame, font=("Arial", 25))
weatherWindLabel.pack(expand=True, anchor = "n")
##################################################
#### Return Button ####
##################################################
returnButton = ctk.CTkButton(resultPage, text="Return", command=returnButtonClick)
returnButton.pack(pady=10)
ErrorFrame = ctk.CTkFrame(searchPage)
ErrorLabel = ctk.CTkLabel(ErrorFrame, text="")
def doSearch(): def doSearch():
threading.Thread(target=searchWeather, daemon=True).start() threading.Thread(target=searchWeather, daemon=True).start()
@@ -433,6 +369,78 @@ def showSearch():
resultPage.pack(fill="both", expand=True) resultPage.pack(fill="both", expand=True)
if not APIKey:
app.after(500, openAPIPopup)
searchPage.pack(fill="both", expand=True)
searchPage.pack(pady=200)
searchFrame = ctk.CTkFrame(searchPage, width=500)
searchFrame.pack(pady=30, anchor="center")
searchLabel = ctk.CTkLabel(searchFrame, text="Which city do you want to know the weather?", font=("Arial", 30))
searchLabel.pack(pady=5, padx=15)
cityEntry = ctk.CTkEntry(searchPage, placeholder_text="Enter City", font=("Arial", 22, "bold"), width=800, height=70)
cityEntry.pack(pady=10, anchor="center")
cityEntry.bind("<Return>", lambda event: doSearch())
resultTitle = ctk.CTkLabel(resultPage, text="Weather: ", font=("Arial", 60, "bold"))
resultTitle.pack(pady=20)
###################################################
#### WEATHER FRAMES ####
###################################################
cardsFrame = ctk.CTkFrame(resultPage, fg_color="transparent")
cardsFrame.pack(fill="both", expand=True, padx=20, pady=20)
weatherTempFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherTempFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherTempFrame.pack_propagate(False)
weatherTempTitle = ctk.CTkLabel(weatherTempFrame, text="Temperature", font=("Arial", 45, "bold"))
weatherTempTitle.pack(expand=True, fill="both", pady=(20,10))
weatherTempLabel = ctk.CTkLabel(weatherTempFrame, font=("Arial", 25))
weatherTempLabel.pack(expand=True, anchor="n")
weatherGeneralFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherGeneralFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherGeneralFrame.pack_propagate(False)
weatherGeneralTitle = ctk.CTkLabel(weatherGeneralFrame, text="General:", font=("Arial", 45, "bold"))
weatherGeneralTitle.pack(expand=True, fill="both", pady=(20,10))
weatherGeneralLabel = ctk.CTkLabel(weatherGeneralFrame, font=("Arial", 25))
weatherGeneralLabel.pack(expand=True, anchor = "n")
weatherWindFrame = ctk.CTkFrame(cardsFrame, width=500, height=350)
weatherWindFrame.pack(side="left", expand=True, fill="both", padx=10)
weatherWindFrame.pack_propagate(False)
weatherWindTitle = ctk.CTkLabel(weatherWindFrame, text="Wind", font=("Arial", 45, "bold"))
weatherWindTitle.pack(expand=True, fill="both", pady=(20,10))
weatherWindLabel = ctk.CTkLabel(weatherWindFrame, font=("Arial", 25))
weatherWindLabel.pack(expand=True, anchor = "n")
##################################################
#### Return Button ####
##################################################
returnButton = ctk.CTkButton(resultPage, text="Return", command=returnButtonClick)
returnButton.pack(pady=10)
ErrorFrame = ctk.CTkFrame(searchPage)
ErrorLabel = ctk.CTkLabel(ErrorFrame, text="")
cityEntry.bind("<Return>", lambda event: doSearch()) cityEntry.bind("<Return>", lambda event: doSearch())