在 python 中使用一个 tkinter 按钮创建多个 windows
Create multiple windows using one tkinter button in python
我正在从单个 tkinter 按钮打开其他 windows,如下所示:
https://www.pythontutorial.net/tkinter/tkinter-toplevel/
那里显示的代码是
import tkinter as tk
from tkinter import ttk
class Window(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.geometry('300x100')
self.title('Toplevel Window')
ttk.Button(self,
text='Close',
command=self.destroy).pack(expand=True)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('300x200')
self.title('Main Window')
# place a button on the root window
ttk.Button(self,
text='Open a window',
command=self.open_window).pack(expand=True)
def open_window(self):
window = Window(self)
window.grab_set()
if __name__ == "__main__":
app = App()
app.mainloop()
如果我 运行 这个程序,则不可能点击“打开 window”按钮两次来获得两个 Toplevel 实例。我想只用一个按钮获得尽可能多的实例。这有可能吗?
只需删除 window.grab_set()
。 grab_set() 方法将此应用程序的所有事件路由到此小部件。无论生成什么事件,如按钮单击或按键,都会定向到另一个 window。
def open_window(self):
window = Window(self)
考虑这行代码:
window.grab_set()
这是在创建的第一个 window 上设置 grab。这意味着来自键盘和鼠标的所有事件都将传送到创建的第一个 window。这意味着在删除抓取之前,您不能再单击根 window 中的按钮。请注意,如果 window 被销毁,则自动删除抢夺。
Grab 通常在创建模态对话框时使用——在程序继续之前需要用户输入的对话框。通过抓取,您可以确保用户在与对话框交互之前无法与主程序交互。
解决方案很简单:如果您的目标是能够同时打开多个 windows,则删除对 window.grab_set()
的调用。
我正在从单个 tkinter 按钮打开其他 windows,如下所示: https://www.pythontutorial.net/tkinter/tkinter-toplevel/ 那里显示的代码是
import tkinter as tk
from tkinter import ttk
class Window(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.geometry('300x100')
self.title('Toplevel Window')
ttk.Button(self,
text='Close',
command=self.destroy).pack(expand=True)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('300x200')
self.title('Main Window')
# place a button on the root window
ttk.Button(self,
text='Open a window',
command=self.open_window).pack(expand=True)
def open_window(self):
window = Window(self)
window.grab_set()
if __name__ == "__main__":
app = App()
app.mainloop()
如果我 运行 这个程序,则不可能点击“打开 window”按钮两次来获得两个 Toplevel 实例。我想只用一个按钮获得尽可能多的实例。这有可能吗?
只需删除 window.grab_set()
。 grab_set() 方法将此应用程序的所有事件路由到此小部件。无论生成什么事件,如按钮单击或按键,都会定向到另一个 window。
def open_window(self):
window = Window(self)
考虑这行代码:
window.grab_set()
这是在创建的第一个 window 上设置 grab。这意味着来自键盘和鼠标的所有事件都将传送到创建的第一个 window。这意味着在删除抓取之前,您不能再单击根 window 中的按钮。请注意,如果 window 被销毁,则自动删除抢夺。
Grab 通常在创建模态对话框时使用——在程序继续之前需要用户输入的对话框。通过抓取,您可以确保用户在与对话框交互之前无法与主程序交互。
解决方案很简单:如果您的目标是能够同时打开多个 windows,则删除对 window.grab_set()
的调用。