我真的在Python的基本概念和語言方面取得了一些進展,但是當我們開始將Tkinter添加到混合中時,我有點迷失方向。 BryanOakley在網絡上隨處可見的關於多個窗口和Tkinter的問題做出了巨大貢獻。我舉了他的例子,並將其與我見過的其他一些例子結合起來,並開始製作鬧鐘,並在警報時間開始時改變時鐘背景。問題是,我無法看到樹木通過林並沒有看到如何:Python3,Tkinter和用戶輸入時間請求
A)獲取輸入請求從Tkinter的窗口出現
B)呼叫用戶的報警類別輸入到時鐘類觸發窗口的背景變化。
我覺得我的問題是我不完全理解在哪裏嵌套不同的方法,以及如何獲取存儲用戶數據的變量,並將其從字符串格式化爲時間。我想我只是需要一些指導,但是如果你認爲我已經過了頭,那麼請將我指向淺端,這樣我就可以繼續練習。這是我的想法,把它或類似的東西放到tick()方法中,當然我不得不想知道哪些輸入甚至會被輸入到Tkinter中。我正在螺旋上升。說明:
def wake(self):
self.__init__(self, hour, min)
self.hour = hour
self.min = min
input("what is the hour?",
input("What is the min?",
hour = datetime.datetime.now().strftime("%I")
min = datetime.datetime.now().strftime("%M")
if self.hour and self.min == time1():
label.config(text = time1, bg = "green")
else:
label.config(text = time1, bg = "red")
這是我到目前爲止有:
import tkinter as tk
from tkinter import font as tkfont
from tkinter import messagebox
import time
import datetime
class digitalClockApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title_font = tkfont.Font(family='Helvetica', size=100, weight="bold", slant="italic")
container = tk.Frame(self)
container.pack(side = "top", fill= "both", expand =1)
container.grid_rowconfigure(0,weight = 1)
container.grid_columnconfigure(0, weight = 1)
self.frames = {}
for F in (introPage, clock, alarm):
page_name = F.__name__
frame = F(parent = container, controller = self)
self.frames[page_name] = frame
frame.grid(row = 0, column = 0, sticky = "nsew")
self.geometry("640x480")
self.show_frame("introPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class introPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text = "Welcome", bg = "black", fg = "white", font = controller.title_font)
label.pack(side = "top", fill = "both", expand = 1)
button1 = tk.Button(self, text = "Go to Clock", command = lambda: controller.show_frame("clock"))
button2 = tk.Button(self, text = "Go to Set Alarm", command = lambda: controller.show_frame("alarm"))
button1.pack(side = "left")
button2.pack(side = "left")
class clock(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text = "", bg = "black", fg = "white", font = controller.title_font)
label.pack(side = "top", fill = "both", expand = 1)
button = tk.Button(self, text = "Home Screen", command = lambda: controller.show_frame("introPage"))
button.pack()
def tick(time1 = ""):
time2 = time.strftime("%I:%M:%S")
if time2 != time1:
time1 = time2
label.config(text = time1, bg = "red")
label.after(200, tick)
tick()
class alarm(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text = "", bg = "black", fg = "white", font = controller.title_font)
label.pack(side = "top", fill = "both", expand = 1)
def wake():
button = tk.Button(self, text = "Home Screen", command = lambda: controller.show_frame("introPage"))
button.pack()
if __name__ == "__main__":
app = digitalClockApp()
app.mainloop()
謝謝你的幫助! –
所以,我正在嘗試你的建議,但是一旦我將多個方法添加到一個類中,我就會掛斷電話。看起來我可以定義類,讓時鐘運行,但第二次我嘗試添加一個按鈕的警報,我結束了屬性錯誤,或錯誤指示變量被定義之前被調用。使用Tkinter時,類中的方法的順序有竅門嗎? –
@RL_NooB:除了標準編程實踐之外,沒有其他技巧:在使用它們之前定義事物,在多個地方保存對所需事物的引用等。 –