2017-06-22 22 views
-1

我有一個時鐘放在我的GUI程序中。目前我使用.after()來更新時鐘。我不確定這種方法是否是最佳選擇,我試圖找到不同的或更好的解決方案。擁有定時循環的時鐘或者有更好的方法是一個好主意嗎?

是我目前處理我的圖形用戶界面時鐘的最佳方式?或者還有什麼我可以做的?

下面是一個例子:

from tkinter import * 
from time import strftime 

class MiniApp(Frame): 
    def __init__(self, master, *args, **kwargs): 
     Frame.__init__(self, master, *args, **kwargs) 
     self.master = master 
     self.my_clock = Label(self.master) 
     self.my_clock.pack() 
     self.status_clock() 

    def status_clock(self): 
     self.my_clock.config(text ="{}".format(strftime("%H:%M:%S"))) 
     self.my_clock.after(1000, lambda: self.status_clock()) 


if __name__ == "__main__": 
    root = Tk() 
    app = MiniApp(root) 
    root.mainloop() 
+1

這是在Tkinter做這種事情的正確方法。 –

+0

@MikeDriscoll:好的。過去我曾被告知,像這樣的定時循環可能是一個問題,但它與時鐘不同。這就是爲什麼我擔心這是否也是一個問題。 –

+1

如果只顯示1秒的分辨率,爲什麼每秒更新5次?另外,'lambda:self.status_clock()'沒有意義,只需使用'after(200,self.status_clock)''。 'lambda'是非常少見的,似乎讓很多人感到困惑。 –

回答

2

你有正確的方法。儘管如此,我認爲沒有理由每秒調用5次。此外,你有很多額外的垃圾,你不需要。一點清潔劑:

def status_clock(self): 
    self.my_clock.config(text=strftime("%H:%M:%S")) 
    self.my_clock.after(1000, self.status_clock) 
+0

雅我正在搞定時器,忘了把它改回1000.感謝您的信息。我希望可能有不同的方式來完成相同的任務,甚至更好的方式,但我想我堅持這種方法:) –

+0

這似乎是一個偉大的方法給我;你對此有什麼反對意見讓你想要一個「更好的方式」? – Novel

+0

我曾經在一個問題的答案中告訴過我,我建議解決OP所遇到的定時循環是一個非常糟糕的主意。我現在正在查看是否可以找到該評論。無論如何,因爲這個評論,它讓我想知道是否在這裏使用'after()'是個好主意。我想我什麼也不擔心。 –

相關問題