因此,我编写了这个简单的代码来重新创建我希望我的实际应用程序的行为方式(抱歉,如果我不使用oop,并且真的是全新的):
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行为的信息,而且我似乎找不到解决它的方法。我希望这段视频是可以理解的,很抱歉英语不好不是我的主要语言,如果你有什么问题可以问我,谢谢!
发布于 2020-03-09 02:24:58
对于您的情况,简单的方法是在grab_set()中保存当前OpenSecondToplevel()窗口,等待第二层关闭,然后恢复保存窗口的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()https://stackoverflow.com/questions/60593281
复制相似问题