Tkinter Notebook标签页中PanedWindow滑块(sash)定位异常求助
Tkinter Notebook标签页中PanedWindow滑块(sash)定位异常求助
大家好,我最近在用Tkinter做界面的时候碰到了一个奇怪的问题:我想在Notebook的标签页里放一个水平方向的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()
我试过在窗口创建完成后点击界面上的按钮重新设置滑块位置,但第三个滑块还是没法定位到1000的位置。
我的系统信息
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
真心希望各位能帮我分析下为什么第三个滑块会出现这种异常,谢谢大家!
备注:内容来源于stack exchange,提问作者Psionman




