鱼C论坛

 找回密码
 立即注册
查看: 1930|回复: 4

tk toplevel

[复制链接]
发表于 2023-6-17 17:12:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我用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()

评分

参与人数 3荣誉 -5 贡献 -3 收起 理由
liuhongrun2022 + 5 + 3
sfqxx_小 -5 -3
sfqxx -5 -3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-17 17:14:06 | 显示全部楼层
你可以在  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  窗口将再次变得可以操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-6-17 17:19:13 | 显示全部楼层
isdkz 发表于 2023-6-17 17:14
你可以在  Toplevel  弹出的时候使用  root.wait_window(test)  来阻止  root  窗口的操作。下面是你的代码 ...

没效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-18 06:14:54 | 显示全部楼层
本帖最后由 阿奇_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: 关键是英文注释那几句设置,及其关系。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-21 14:16:05 | 显示全部楼层
禁用是指不能按上面的按钮?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 07:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表