tkinter代码如何执行?

戴维·哈塞尔伯格

我正在使用tkinter编写程序,但是我不明白它是如何工作的。通常,代码是自顶向下执行的,但是使用tkinter显然不会。

例如,我已将一个功能绑定到鼠标左键,并且每次单击该按钮时都会执行此功能。但是如何处理周围的其他代码呢?我的问题是我在程序开始时初始化了一个变量,该变量用作绑定函数中的参数,然后在函数中将其更改并返回。但是每次调用该函数时,该变量似乎都会重置为其初始值。

有人知道为什么吗?

我把它写成这样:

var = "black"
var = c.bind("<Button-1>", lambda event: func(event, arg=var))

函数“ func”会更改var并返回它,但是下次我按下按钮时,该变量始终为“ black”。

提前致谢!

布莱恩·奥克利(Bryan Oakley)

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从用户获取输入并在tkinter中将输入作为python代码(sql)执行?

来自分类Dev

如何从Python执行JavaScript代码?

来自分类Dev

如何执行以下curl代码?

来自分类Dev

如何逐步执行我的代码?

来自分类Dev

如何执行此汇编代码?

来自分类Dev

如何使用tkinter按钮执行python文件?

来自分类Dev

如何为Tkinter GUI制作作弊代码

来自分类Dev

如何从PhantomJS或grover跳过代码执行

来自分类Dev

如何对此代码执行Numpy优化?

来自分类Dev

mail :: queue调用后如何执行代码

来自分类Dev

如何同时执行以下代码?

来自分类Dev

$ digest完成后如何执行代码?

来自分类Dev

如何绘制代码的流水线执行

来自分类Dev

测试失败后如何执行代码

来自分类Dev

如何为每个请求执行通用代码?

来自分类Dev

如何从Scala / Java执行OCaml代码?

来自分类Dev

如何处理永远不会执行的代码

来自分类Dev

PHP代码执行后如何关闭窗口?

来自分类Dev

什么是执行顺序?它如何影响代码?

来自分类Dev

每次查看页面时如何执行代码

来自分类Dev

如何仅在5秒后执行代码?

来自分类Dev

退出线程时如何执行代码

来自分类Dev

libgdx动作后如何执行代码?

来自分类Dev

如何在javascript中连续执行代码?

来自分类Dev

如何在代码中执行osgi命令

来自分类Dev

如何对该代码执行按键操作?

来自分类Dev

如何在puppeteer中执行JavaScript代码

来自分类Dev

如何在循环中执行异步代码?

来自分类Dev

打开Jupyter Notebook时如何执行代码