在通过父窗口上的操作创建子窗口时,我无法使 tkinter 行为满足以下所有条件:
我已经尝试过
child.transient(root)
和child.grab_set()
,但它们都没有像我希望的那样工作。
from tkinter import *
from tkinter.ttk import *
master = Tk()
master.geometry("200x200")
def openNewWindow():
newWindow = Toplevel(master)
newWindow.geometry("200x200")
Label(newWindow,
text ="This is a new window").pack()
newWindow.grab_set()
label = Label(master,
text ="This is the main window")
label.pack(pady = 10)
btn = Button(master,
text ="Click to open a new window",
command = openNewWindow)
btn.pack(pady = 10)
mainloop()
在 OSX 上,使用
grab_set
似乎完全可以满足您的需求。它应该在所有平台上都一样工作,尽管我没有能力在任何其他平台上测试它。
在以下示例中,您可以单击主窗口上的按钮来创建新窗口。当该新窗口打开时,您无法再次单击主窗口中的按钮。您仍然可以使用标题栏上的关闭按钮关闭主窗口。
import tkinter as tk
def new_window():
top = tk.Toplevel(root)
entry = tk.Entry(top)
entry.pack(fill="x", padx=20, pady=20)
entry.focus_set()
top.grab_set()
root = tk.Tk()
button = tk.Button(root, text="new window", command=new_window)
button.pack(padx=20, pady=20)
root.mainloop()