Tkinter Python上的顶级行为的顶级

2024-10-01 17:38:36 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我编写了这个简单的代码,以重新创建我希望实际应用程序的行为方式(对不起,如果我没有使用并且在这方面非常新):

import tkinter as tk
from tkinter import ttk

def OpenSecondToplevel():
  Top2=tk.Toplevel(root)
  Top2.geometry("250x200")
  Top2.grab_set()
  Top2.title("TopLevel 2")
  Label = tk.Label(Top2, text="This is Toplevel 2")
  Label.pack()

def OpenFirstToplevel():
  Top1=tk.Toplevel(root)
  Top1.geometry("250x200")
  Top1.grab_set()
  Top1.title("TopLevel 1")
  Button2 = tk.Button(Top1, text="Open Toplevel 2", command=OpenSecondToplevel)
  Button2.pack()

root = tk.Tk()
root.title("Main")
root.geometry("250x200")
Frame1 = tk.Frame(root)
Button1 = tk.Button(Frame1, text="Open Toplevel 1", command=OpenFirstToplevel)

Frame1.pack()
Button1.pack()

root.mainloop()

我录制了一段视频,解释我的问题,因为我一直在关注Toplevels行为,似乎找不到解决方法。我希望视频是可以理解的对不起,糟糕的英语不是我的主要语言,如果你有任何问题可以问我,谢谢

https://www.youtube.com/watch?v=Ks2zRU0fOJM


Tags: textimporttitletkinterdefrootlabelpack
1条回答
网友
1楼 · 发布于 2024-10-01 17:38:36

对于您的情况,最简单的方法是保存在OpenSecondToplevel()中有grab_set()的当前窗口,等待第二个顶级关闭,然后恢复已保存窗口的grab_set()状态:

def OpenSecondToplevel():
    win = root.grab_current() # save the current window which has grab_set()
                              # win is None is no window has grab_set()
    Top2=tk.Toplevel(root)
    Top2.geometry("250x200")
    Top2.grab_set()
    Top2.title("TopLevel 2")
    Label = tk.Label(Top2, text="This is Toplevel 2")
    Label.pack()
    if win:
        # wait until current toplevel is destroyed
        win.wait_window(Top2)
        # resume grab_set() for saved window
        win.grab_set()

相关问题 更多 >

    热门问题