鱼C论坛

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

tk toplevel

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

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

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

x
我用Tkinter创建了两个窗口,一个是tk.Tk(),一个是Toplevel()

现在我想设置当某个名叫 test 的 Toplevel 弹出时,禁用 Tk() 的根窗口。
  1. from tkinter import *

  2. root = Tk()

  3. def create():
  4.     test = Toplevel()
  5.     ## What should I do Here

  6.     msg = Message(top, text="111")
  7.     msg.pack()

  8. Button(root, text="创建顶级窗口", command=create).pack()

  9. mainloop()
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. from tkinter import *

  2. root = Tk()

  3. def create():
  4.     test = Toplevel(root)   # 将 root 作为 Toplevel 的父窗口

  5.     msg = Message(test, text="111")   # 确保 Message 的 parent 是 test 而不是 top
  6.     msg.pack()

  7.     root.wait_window(test)   # 这将会使 root 窗口在 test 窗口关闭前无法操作

  8. Button(root, text="创建顶级窗口", command=create).pack()

  9. mainloop()
复制代码

这段代码的工作原理是:创建了一个名为  test  的  Toplevel  窗口,并在  test  窗口关闭之前阻止  root  窗口的所有操作。所以,在  test  窗口打开的时候,你将无法与  root  窗口进行交互。当你关闭  test  窗口后, root  窗口将再次变得可以操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

没效果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-18 06:14:54 | 显示全部楼层
本帖最后由 阿奇_o 于 2023-6-18 06:16 编辑

参考官方文档给出的例子,稍作修改:
  1. from tkinter import Button, Tk, Toplevel, ttk, mainloop
  2. root = Tk()
  3. root.geometry("500x300")
  4. # ttk.Entry(root, ).grid()   # something to interact with

  5. def create():   
  6.     # 参考官方给出的例子:
  7.     def dismiss ():
  8.         dlg.grab_release()
  9.         dlg.destroy()
  10.     dlg = Toplevel(root)
  11.     dlg.geometry("200x100+300+300")
  12.     ttk.Button(dlg, text="Done", command=dismiss).grid()
  13.     dlg.protocol("WM_DELETE_WINDOW", dismiss) # intercept close button
  14.     dlg.transient(root)   # dialog window is related to main
  15.     dlg.wait_visibility() # can't grab until window appears, so we wait
  16.     dlg.grab_set()        # ensure all input goes to our window
  17.     dlg.wait_window()     # block until window is destroyed

  18. Button(root, text="创建顶级窗口", command=create).grid()

  19. mainloop()
复制代码


ps: 关键是英文注释那几句设置,及其关系。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-21 14:16:05 | 显示全部楼层
禁用是指不能按上面的按钮?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 07:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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