Tkinter chlid /父窗口管理

问题描述 投票:0回答:1

在通过父窗口上的操作创建子窗口时,我无法使 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() 
python user-interface tkinter
1个回答
1
投票

在 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()
© www.soinside.com 2019 - 2024. All rights reserved.