0
我正在創建一個Python程序,在Tkinter窗口中顯示時間和天氣。我需要有時間,天氣和其他不斷更新的東西。這裏是我的舊代碼:更新Tkinter窗口的內容
import time
from Tkinter import *
root = Tk()
while True:
now = time.localtime(time.time()) # Fetch the time
label = time.strftime("%I:%M", now) # Format it nicely
# We'll add weather later once we find a source (urllib maybe?)
w = Label(root, text=label) # Make our Tkinter label
w.pack()
root.mainloop()
我從來沒有做過與Tkinter的任何東西,這是令人沮喪的是,環不起作用。顯然,Tkinter在運行時不會讓你做任何類似循環或非Tkinter的任何事情。我以爲我可以用線程做些什麼。
#!/usr/bin/env python
# Import anything we feel like importing
import threading
import time
# Thread for updating the date and weather
class TimeThread (threading.Thread):
def run (self):
while True:
now = time.localtime(time.time()) # Get the time
label = time.strftime("%I:%M", now) # Put it in a nice format
global label # Make our label available to the TkinterThread class
time.sleep(6)
label = "Weather is unavailable." # We'll add in weather via urllib later.
time.sleep(6)
# Thread for Tkinter UI
class TkinterThread (threading.Thread):
def run (self):
from Tkinter import * # Import Tkinter
root = Tk() # Make our root widget
w = Label(root, text=label) # Put our time and weather into a Tkinter label
w.pack() # Pack our Tkinter window
root.mainloop() # Make it go!
# Now that we've defined our threads, we can actually do something interesting.
TimeThread().start() # Start our time thread
while True:
TkinterThread().start() # Start our Tkinter window
TimeThread().start() # Update the time
time.sleep(3) # Wait 3 seconds and update our Tkinter interface
這樣也行不通。出現多個空窗口,並且它們出現了一噸。我的調試器也收到了很多錯誤。
當我更新時,是否需要停止並重新打開我的窗口?我可以告訴Tkinter更新tkinter.update(root)
之類的東西嗎?
是否有解決方法或解決方案,或者我錯過了什麼?如果您看到我的代碼有任何問題,請告訴我。
謝謝! 亞歷
所以我得到這個: [鏈接](http://txt.do/o5we) 它不斷打開新的空白窗口的每一秒。我在這裏錯過了什麼? – user3724472 2014-09-04 16:27:38
1.每次調用update時,都會創建一個新的'Tk'實例。像以前一樣將它移到函數之外。 2.啓動主循環後,不必調用'update'。當然,我沒有發表整個劇本。我只是給了你方法和一些說明如何實現你的功能。 – TidB 2014-09-04 16:30:59