Как узнать, какие кадры находятся сверху (иначе после tkraise)? - PullRequest
1 голос
/ 15 июня 2019

Я делаю графический интерфейс с Tkinter и мне нужно знать, какой кадр находится сверху, чтобы один из пониженных не входил в один из своих циклов и изменял некоторые настройки.

Я уже пробовал с

self.tk.eval('frame stackorder '+str(self.frames["StartPage"])+' isabove '+str(self.frames["Wallpaper"]))=='1'

Я сам являюсь моим корнем (это класс) и получаю эту ошибку

_tkinter.TclError: bad window path name "stackorder"

также

self.tk.eval('wm stackorder '+str(self.frames["StartPage"])

дает мне эту ошибку:

_tkinter.TclError: window ".!frame.!startpage" isn't a top-level window

Это способ, которым я создаю и меняю между кадрами

self.frames = {}
        for F in (StartPage, PageOne, PageTwo):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame

            # put all of the pages in the same location;
            # the one on the top of the stacking order
            # will be the one that is visible.
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("StartPage")

    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()

Я выбрал способ смены кадра отсюда ( Переключение между двумя кадрами в tkinter ) но не знаю, как узнать, кто из них на вершине.

1 Ответ

0 голосов
/ 15 июня 2019

Вероятно, вам следует сохранить ссылку на видимую рамку, чтобы вы могли получить к ней доступ:

class App(tk.Tk()):
    def __init__(self, ...):
        ...
        self.visible_frame = "StartPage"
        ...

    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()
        self.visible_frame = page_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...