我正在使用tkinter编写程序,但是我不明白它是如何工作的。通常,代码是自顶向下执行的,但是使用tkinter显然不会。
例如,我已将一个功能绑定到鼠标左键,并且每次单击该按钮时都会执行此功能。但是如何处理周围的其他代码呢?我的问题是我在程序开始时初始化了一个变量,该变量用作绑定函数中的参数,然后在函数中将其更改并返回。但是每次调用该函数时,该变量似乎都会重置为其初始值。
有人知道为什么吗?
我把它写成这样:
var = "black"
var = c.bind("<Button-1>", lambda event: func(event, arg=var))
函数“ func”会更改var并返回它,但是下次我按下按钮时,该变量始终为“ black”。
提前致谢!
Tkinter确实确实自上而下运行。使tkinter与众不同的是,当它到达底部时会发生什么。
通常,tkinter程序中的最后一个可执行语句是mainloop
对根窗口方法的调用。坦率地说,tkinter程序如下所示:
# top of the program logic
root = tkinter.Tk()
...
def some_function(): ...
...
some_widget.bind("<1>", some_function)
...
# bottom of the program logic
root.mainloop()
mainloop
只是一个相对简单的无限循环。您可以认为它具有以下结构:
while the_window_has_not_been_destroyed():
event = wait_for_next_event()
process_event(event)
程序处于持续的等待状态。它等待诸如按钮单击或按键单击之类的事件,然后处理该事件。从概念上讲,它通过扫描表来查找该事件是否已与捕获该事件的窗口小部件关联来处理该事件。如果找到匹配项,它将运行绑定到该窗口小部件和事件组合的命令。
设置绑定或将命令与按钮相关联时,您正在向该表中添加内容。您正在告诉tkinter“如果事件X发生在小部件Y上,请运行函数Z”。
您不能使用返回结果,因为调用此函数的不是您的代码。调用该函数的代码是mainloop
,它不在乎该函数返回什么。任何返回的内容都将被忽略。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句