Кнопка Tkinter «clickbox» отсоединена от виджета в полноэкранном режиме

#python-3.x #user-interface #tkinter

#python-3.x #пользовательский интерфейс #tkinter

Вопрос:

Я нахожусь на macOS 10.15.7 и только что обнаружил, что когда я запускаю свое приложение, кнопки работают отлично, независимо от того, насколько большим я делаю окно. Однако, когда я перевожу окно в полноэкранный режим, кнопки регистрируют щелчки внутри окна примерно на 20 пикселей ниже того места, где отображается виджет. Кто-нибудь еще сталкивался с этой проблемой? Я использую диспетчер геометрии сетки, sticky="we" поэтому я не думаю, что проблема в том, как я добавил кнопки. Я также вызывал grid_rowconfigure(i, weight=1) каждую строку моего приложения для выполнения соответствующего выравнивания по вертикали при растяжении.

Вот небольшой фрагмент, который показывает, как я структурировал приложение.

 import tkinter as tk, tkinter.ttk as ttk

class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        container = ttk.Frame(self)
        container.pack(fill='both', expand=True)
        self.frames = {}
        for frame in (Dashboard, PageOne, PageTwo, PageThree):
            f = frame(container, self)
            self.frames[frame] = f
            f.grid(column=0, row=0, sticky="nswe")
        self.switch_page(Dashboard)

    def switch_page(self, frame):
        f = self.frames[frame]
        f.tkraise()

class Dashboard(ttk.Frame):
    def __init__(self, master, controller):
        super().__init__(master)
        self.master = master

        button1 = ttk.Button(self, text="Page One",
            command=lambda: controller.switch_page(PageOne))
        button1.grid(column=1, row=0, sticky="we")

        button2 = ttk.Button(self, text="Page Two",
            command=lambda: controller.switch_page(PageTwo))
        button2.grid(column=1, row=1, sticky="we")

        button3 = ttk.Button(self, text="Page Three",
            command=lambda: controllerswitch_page(PageThree))
        button3.grid(column=1, row=2, sticky="we")

        ttk.Label(self).grid(column=0, row=0, rowspan=3)
        ttk.Label(self).grid(column=2, row=0, rowspan=3)

class PageOne(ttk.Frame):
    def __init__(self, master, controller):
        super().__init__(master)
        self.master = master
        
        ttk.Button(self, text="Back to home",
            command=lambda: controller.switch_page(Dashboard)
            ).pack()

class PageTwo(ttk.Frame):
    def __init__(self, master, controller):
        super().__init__(master)
        self.master = master
        
        ttk.Button(self, text="Back to home",
            command=lambda: controller.switch_page(Dashboard)
            ).pack()

class PageThree(ttk.Frame):
    def __init__(self, master, controller):
        super().__init__(master)
        self.master = master
        
        ttk.Button(self, text="Back to home",
            command=lambda: controller.switch_page(Dashboard)
            ).pack()
  

Кроме того, я понял, что я прокомментировал вызовы grid.row_configure , поэтому я не считаю, что это способствует проблеме. Опять же, проблема не возникает с приложением в целом, только когда я нажимаю полноэкранную кнопку в самом окне.

Комментарии:

1. Пожалуйста, покажите нам минимальный пример.

2. @jizhihaoSAMA Я обновил вопрос, включив пример структуры моего приложения