You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确检测ttk.Panedwindow的sash(窗格分隔条)移动?

检测ttk.Panedwindow窗格移动的正确方法

之前通过绑定<Configure>事件来检测窗格移动的方式并不精准,这个事件会在多种无关场景下触发(比如主窗口大小调整、组件布局更新等),并非专门针对窗格拖动的事件。

ttk.Panedwindow提供了专门的**<<Panedwindow>>虚拟事件**,该事件只会在拖动窗格(sash)调整分区大小的时候触发,这才是检测窗格移动的正确方法。

修改后的测试脚本

import tkinter as tk
import tkinter.ttk as ttk


class App(ttk.PanedWindow):

    def __init__(self, parent, orient="horizontal"):
        super().__init__(parent, orient=orient)
        self.parent = parent
        self.frame1 = ttk.Frame(self)
        self.frame2 = ttk.Frame(self)
        self.add(self.frame1)
        self.add(self.frame2)

        # 创建滚动条
        self.xsb = ttk.Scrollbar(self.frame2, orient='horizontal')  # 为frame2创建横向滚动条
        self.ysb = ttk.Scrollbar(self.frame2, orient='vertical')    # 为frame2创建纵向滚动条
        self.xsb.pack(side=tk.BOTTOM, fill=tk.X )                  # 横向滚动条置于底部,填充X轴
        self.ysb.pack(side=tk.RIGHT, fill=tk.Y )                   # 纵向滚动条置于右侧,填充Y轴

        self.t5 = tk.Text(self.frame2, wrap='none',
                          xscrollcommand=self.xsb.set,
                          yscrollcommand=self.ysb.set)
        for line in range(50):
            self.t5.insert(tk.END, str(line+1) + " 现在是所有善良的人站出来帮助他们群体的时候。现在是所有善良的人站出来帮助他们群体的时候。\n")
        self.t5.pack(expand=True, fill='both') # 让文本组件填满frame2

        # 绑定专门的窗格移动事件
        self.bind("<<Panedwindow>>", self.on_sash_move)

    def on_sash_move(self, event):
        self.update_idletasks()
        # 获取两个窗格的当前大小
        frame1_width = self.frame1.winfo_width()
        frame2_width = self.frame2.winfo_width()
        print(f"窗格1宽度: {frame1_width}, 窗格2宽度: {frame2_width}")

if __name__ == "__main__":
    root = tk.Tk()
    root.title("测试")
    root.geometry('600x400+400+350')

    app = App(root)
    app.pack(fill=tk.BOTH, expand=True)
    
    root.mainloop()

说明

  • <<Panedwindow>>虚拟事件是ttk.Panedwindow的专属事件,仅在拖动窗格时触发,避免了<Configure>事件的误触发问题。
  • 在事件处理函数中,可以通过winfo_width()/winfo_height()获取窗格的实时尺寸,实现更精准的业务逻辑。

内容的提问来源于stack exchange,提问作者Sun Bear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:53:10