Problema com o posicionamento do caixilho do PanedWindow em uma aba do Notebook.
Estou tentando criar uma aba do Notebook que contém uma PanedWindow com quatro painéis.
Entretanto, quando tento posicionar as folhas manualmente, a terceira folha não aparece na posição esperada.
Comportamento esperado:
As três faixas devem ser colocadas nas posições 100, 657 e 1000.
Comportamento observado:
- As duas primeiras faixas estão colocadas corretamente em 100 e 657.
- A terceira faixa aparece em 663 em vez de 1000.
Aqui está meu código:
import tkinter as tk
from tkinter import ttk
class Main():
def __init__(self) -> None:
self.root = tk.Tk()
self.root.geometry('1100x400')
self.root.protocol("WM_DELETE_WINDOW", self.dismiss)
self.root.columnconfigure(0, weight=1)
self.root.rowconfigure(0, weight=1)
notebook = self._notebook(self.root)
notebook.grid(row=0, column=0, sticky=tk.NSEW)
# Debugging button to retry sash placement
button = tk.Button(self.root, text='...', command=self.click)
button.grid(row=1, column=0)
self.root.mainloop()
def _notebook(self, master: tk.Frame) -> ttk.Notebook:
notebook = ttk.Notebook(master)
self.test_tab = TestFrame(notebook)
notebook.add(self.test_tab.master_frame, text='Test')
return notebook
def dismiss(self, *args) -> None:
print([self.test_tab.master_frame.sash_coord(index) for index in range(3)])
self.root.destroy()
def click(self, *args) -> None:
# Attempt to reposition sashes (1 moves, 2 doesn't)
sashes = [(100, 1), (500, 1), (1000, 1)]
for index, sash in enumerate(sashes):
self.test_tab.master_frame.sash_place(index, sash[0], 0)
class TestFrame():
def __init__(self, master) -> None:
self.master_frame = self._master_frame(master)
self.master_frame.grid(row=0, column=0, sticky=tk.EW)
# Expected sash positions
sashes = [(100, 1), (657, 1), (1000, 1)]
for index, sash in enumerate(sashes):
self.master_frame.sash_place(index, sash[0], 0)
def _master_frame(self, master) -> ttk.PanedWindow:
frame = tk.PanedWindow(master, orient=tk.HORIZONTAL)
for _ in range(4):
listbox = tk.Listbox(frame)
frame.add(listbox)
return frame
if __name__ == '__main__':
Main()
Mesmo após a janela ser criada, ao clicar no botão, o caixilho não será posicionado corretamente.
Informações do sistema:
OS: Manjaro Linux
KDE Plasma Version: 6.2.5
KDE Frameworks Version: 6.10.0
Qt Version: 6.8.2
Python Version: 3.13.1
tk.TkVersion: 8.6
Qualquer informação sobre o motivo pelo qual a terceira faixa não está posicionada corretamente seria muito apreciada!