gpt4 book ai didi

tkinter - 你能在 tkinter 中多次调用 mainloop() 吗?

转载 作者:行者123 更新时间:2023-12-05 01:50:58 29 4
gpt4 key购买 nike

我的意思是,您可以通过将 mainloop() 函数放在 for 循环或 while 循环中来让程序多次打开窗口吗?它可能看起来像这样:

for i in range(n):
window.mainloop()

或者如果我们使用 while 循环,则这样:

i = 0
while i < n:
window.mainloop()

当我尝试这两种方法中的任何一种时,它只会打开一个窗口。我做错了什么或者 mainloop() 是一个不能放在循环中的函数吗?如果是这样,还有其他方法吗?

最佳答案

多次调用 mainloop 无法打开新窗口。 mainloop 只处理事件,它不创建或重新创建任何窗口。

如果您需要多个窗口,方法是为第二个和后续窗口创建 Toplevel 的实例。然后,您只调用一次 mainloop,所有窗口都将可见(假设它们已设置为可见)。

如果您想创建同一窗口的多个实例,通常的模式是在继承自 Frame 的类中创建您的应用程序。然后,您可以根据需要创建任意数量的窗口,并在每个窗口中创建该框架的一个实例。

这是该技术的一个例子:

import tkinter as tk


class App(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.count = 0
self.button = tk.Button(self, text="Click me!", command=self.click)
self.label = tk.Label(self, text="", width=20)

self.label.pack(side="top", fill="both", expand=True)
self.button.pack(side="bottom", padx=4, pady=4)

self.refresh_clicks()

def click(self):
self.count += 1
self.refresh_clicks()

def refresh_clicks(self):
self.label.configure(text=f"Clicks: {self.count}")

apps = []
n = 5
for i in range(n):
window = tk.Tk() if i == 0 else tk.Toplevel()

app = App(window)
app.pack(fill="both", expand=True)
apps.append(app)

tk.mainloop()

请务必注意,如果您删除第一个窗口,则所有其他窗口都将被删除。如果您不希望这种情况发生,您可以创建然后隐藏根窗口,以便用户只能看到其他窗口。然后,当不再有任何子窗口时,您需要添加一些代码来终止根窗口。

关于tkinter - 你能在 tkinter 中多次调用 mainloop() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72635035/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com