2017-06-22 59 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()'是个好主意。我想我什么也不担心。 –

相关问题