Топливел из топопелевского поведения на Ткинтере Python - PullRequest
2 голосов
/ 09 марта 2020

Итак, я сделал этот простой код, чтобы воссоздать то, как я хочу, чтобы мое реальное приложение работало (извините, если я не использовал и действительно новое в этом):

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 поведении и, похоже, не могу найти способ исправить это. Я надеюсь, что видео понятно извините о плохом Engli sh не мой основной язык, если у вас есть какие-либо вопросы, вы можете задать мне, спасибо!

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

1 Ответ

2 голосов
/ 09 марта 2020

В вашем случае, простой способ - сохранить текущее окно с 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...