当tkinter窗口打开时,如何在其中运行while循环?

2024-09-21 02:48:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个while循环,我想在Tkinter窗口打开时运行它,但是当while循环运行时Tkinter窗口甚至没有打开

这是一个问题,因为我的while循环是一个无限循环

我基本上想创建一个程序,在通过while循环更新按钮来选择上一个选项之后,为用户提供新的选项,但是每当我使用while循环时,Tkinter都不会打开窗口,直到我结束循环

root = Tk()
i=0
while i==0:
    def choice1():
        list1[a1].implement()
        list1.remove(list1[a1])
    def choice2():
        list2[a2].implement()
        list2.remove(list2[a2])

button1 = tk.Button(root, text=list1.headline, command=choice1)
button2 = tk.Button(root, text=list2.headline, command =choice2)
root.mainloop()

此外,还会出现一个错误,因为tkinter会一直执行此循环,直到列表1或列表2中没有项目为止

我想知道的是,当while循环进行时,是否有办法运行Tkinter窗口

a1a2是随机生成的数字。)


Tags: a2tkinterdefa1选项buttonrootimplement
2条回答

您可能应该将root.mainloop放入循环中,否则它将永远不会执行。如果不执行mainloop(),窗口将不会保持打开状态

另外:你需要调用函数,仅仅定义它们是不够的。 因此,除了在循环中只有def choice1()def choice2()之外,还需要在循环中有choice1()choice2(),否则它不会执行这些命令

还有一件事:您需要打包()按钮,因此添加行button1.pack()button2.pack()。按钮也需要在循环之前,这意味着def choice1()def choice2()也需要在循环之前。(否则按钮将永远不会显示)

mainloop()是连续显示窗口的主要原因。当while loop正在运行时,直到while loop结束mainloop()才会执行。因为在您的例子中,while循环永远不会结束,所以包含mainloop()的代码一直在等待轮到它执行

要解决这个问题,您必须将所有希望显示在窗口中的小部件与mainloop()一起放在while loop

像这样:

import tkinter as tk

root = tk.Tk()

i = 0

while i == 0:

    def choice1():
        list1[a1].implement()
        list1.remove(list1[a1])

    def choice2():
        list2[a2].implement()
        list2.remove(list2[a2])


    button1 = tk.Button(root, text=list1.headline, command=choice1)
    button2 = tk.Button(root, text=list2.headline, command=choice2)

    root.mainloop()

相关问题 更多 >

    热门问题