笔记本选项卡中的 PanedWindow 窗框放置问题。
我正在尝试创建一个包含带有四个窗格的 PanedWindow 的笔记本选项卡。
但是,当我尝试手动定位窗扇时,第三个窗扇并没有出现在预期的位置。
预期行为:
三条窗框应放置在位置 100、657 和 1000。
观察到的行为:
- 前两个窗框正确放置在 100 和 657 处。
- 第三个窗体出现在 663 而不是 1000。
这是我的代码:
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()
即使创建了窗口,单击按钮时窗框也不会正确定位。
系统信息:
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
如果您能提供关于为什么第三扇区放置不正确的任何见解,我们将不胜感激!