这是我的代码中的函数 -
class worker(Thread):
def run(self):
for x in range(0,1100000000000):
print (x)
time.sleep(1)
在这里调用 -
def main():
ttk.Button(mainframe, text="Start",command=worker.start)
现在Python也接受了函数赋值 -
ttk.Button(mainframe, text="Start",command=worker().start)
这两者有何不同?
答案 0 :(得分:1)
第一个场景等待我在开始运行线程之前按下按钮,而第二个场景在程序运行后立即开始运行线程。有人可以解释这里到底发生了什么。
考虑这段代码:
ttk.Button(..., command=worker().start())
它的行为完全相同:
w = worker()
result = w.start()
ttk.Button(..., command = result)
这就是python的工作原理,并不是tkinter独有的。您只是要求python调用函数,并将结果作为参数传递给Button
构造函数。
所以它意味着每次都会有更新,一个新的线程实例
不,tkinter是单线程的,mainloop()
不会重新执行您的代码。它只是监听事件并将它们分派给处理程序。
答案 1 :(得分:0)
上周我开始在工作中写tkinter并找到了这个非常有用的教程
http://thinkingtkinter.sourceforge.net
第77,78和79课是关于这个具体问题的。
如果您使用“command = function”,它会存储该功能,只有在单击按钮或按下空格键并且按下按钮时才会调用该功能。
但是,如果使用“command = function()”,它会在创建按钮时调用该函数,而在单击按钮时则不起作用。
而不是“command = function()”使用“command = lambda:function()”
更多细节见第78课