【问题标题】:Is tkinter's mainloop() function actually a loop? [duplicate]tkinter 的 mainloop() 函数实际上是一个循环吗? [复制]
【发布时间】:2020-05-16 09:25:09
【问题描述】:

感谢您对另一个新手问题的耐心等待。我正在学习 tkinter,我对 mainloop() 感到困惑。究竟什么是循环?例如:

import tkinter as tk
class Test(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()
        x = 2
        x += 1
        print(x)
    def create_widgets(self):
        y = 1
        y += 1
        print(y)


root = tk.Tk()
app = Test(master=root)
app.mainloop()

如果这个程序正在循环通过类 Test(或任何一个函数),我的控制台应该继续打印增加的 x 和 y 值。当然,事实并非如此。它只打印一次 x 和 y。

感谢您的帮助!

【问题讨论】:

  • 这是一个循环。当你有一个 GUI 时,运行它的程序需要不断地检查事件(点击、鼠标移动、调整大小等)。调用mainloop 会启动GUI 以开始侦听和处理这些事件。它在后台执行此操作,因此您不必自己处理。
  • 这能回答你的问题吗? Tkinter understanding mainloop -- 阅读 BryanOakley 的回答,我认为它很好地描述了 mainloop
  • 我确实读过 BryanOakley 的回答,这很有帮助,但我仍然感到困惑。是否只有在循环执行期间调用创建该 GUI 的方法?为什么我的 x 值没有增加?

标签: python python-3.x tkinter mainloop


【解决方案1】:

我对 mainloop() 感到困惑。究竟什么是循环?

Tkinter 维护一个事件队列。 mainloop 循环遍历该队列,拉出项目并执行绑定到事件的函数。

如果这个程序正在循环通过类 Test ...

它不会遍历您的代码。有一个内部的、不断更新的事件列表。 mainloop 循环遍历该列表。它不会遍历您的代码。

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2011-06-05
    • 2021-01-11
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2016-08-07
    • 2018-10-28
    • 2013-04-09
    相关资源
    最近更新 更多