tk toplevel
我用Tkinter创建了两个窗口,一个是tk.Tk(),一个是Toplevel()现在我想设置当某个名叫 test 的 Toplevel 弹出时,禁用 Tk() 的根窗口。
from tkinter import *
root = Tk()
def create():
test = Toplevel()
## What should I do Here
msg = Message(top, text="111")
msg.pack()
Button(root, text="创建顶级窗口", command=create).pack()
mainloop() 你可以在Toplevel弹出的时候使用root.wait_window(test)来阻止root窗口的操作。下面是你的代码的改进版:
from tkinter import *
root = Tk()
def create():
test = Toplevel(root) # 将 root 作为 Toplevel 的父窗口
msg = Message(test, text="111") # 确保 Message 的 parent 是 test 而不是 top
msg.pack()
root.wait_window(test) # 这将会使 root 窗口在 test 窗口关闭前无法操作
Button(root, text="创建顶级窗口", command=create).pack()
mainloop()
这段代码的工作原理是:创建了一个名为test的Toplevel窗口,并在test窗口关闭之前阻止root窗口的所有操作。所以,在test窗口打开的时候,你将无法与root窗口进行交互。当你关闭test窗口后, root窗口将再次变得可以操作。 isdkz 发表于 2023-6-17 17:14
你可以在Toplevel弹出的时候使用root.wait_window(test)来阻止root窗口的操作。下面是你的代码 ...
没效果 本帖最后由 阿奇_o 于 2023-6-18 06:16 编辑
参考官方文档给出的例子,稍作修改:
from tkinter import Button, Tk, Toplevel, ttk, mainloop
root = Tk()
root.geometry("500x300")
# ttk.Entry(root, ).grid() # something to interact with
def create():
# 参考官方给出的例子:
def dismiss ():
dlg.grab_release()
dlg.destroy()
dlg = Toplevel(root)
dlg.geometry("200x100+300+300")
ttk.Button(dlg, text="Done", command=dismiss).grid()
dlg.protocol("WM_DELETE_WINDOW", dismiss) # intercept close button
dlg.transient(root) # dialog window is related to main
dlg.wait_visibility() # can't grab until window appears, so we wait
dlg.grab_set() # ensure all input goes to our window
dlg.wait_window() # block until window is destroyed
Button(root, text="创建顶级窗口", command=create).grid()
mainloop()
ps: 关键是英文注释那几句设置,及其关系。。 禁用是指不能按上面的按钮?
页:
[1]