代码之家  ›  专栏  ›  技术社区  ›  Programer Beginner

Tkinter |如何检测靠近末端的Tkinter滚动条位置

  •  0
  • Programer Beginner  · 技术社区  · 7 年前

    我知道,如果我将滚动条控制的帧绑定到一个函数,就可以得到滚动条的位置( onFrameConfigure )像这样: self.calendar_frame.bind("<Configure>", self.onFrameConfigure) ,从 event 在 onFrameConfigure(self, event): 一些 滚动条的x值 event.x . 我认为该值显示了滚动条在px中的位置,因此,如果我滚动到最大右侧,我应该得到与滚动条宽度相同的值(或类似的值),但通过下面的测试,我得到了其他值:

    event.x: -640 | scrollbar.winfo_width(): 382
    event.x: -415 | scrollbar.winfo_width(): 607
    event.x: -245 | scrollbar.winfo_width(): 777
    event.x: -713 | scrollbar.winfo_width(): 309
    

    (以上结果仅在滚动条处于 )

    右端

    我的问题是: 如何检测滚动条何时到达滚动条一端的一端?

    更好的方法是检测滚动条何时关闭 结束是因为出于我的目的(在这里阅读我项目的目的: here )我需要在滚动条达到最大值之前触发一些东西。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Bryan Oakley    7 年前

    如果您想知道滚动的小部件何时滚动到边缘,最简单的解决方案是调用自定义命令,而不是调用 set 关联滚动条的方法。此命令本身可以调用 设置 方法,然后执行您希望它执行的任何其他操作。

    这个命令将被传递到两个参数中,这两个参数表示滚动窗口小部件的视口范围。这些数字是介于0和1之间的浮点数,尽管它们是作为字符串而不是浮点数传递的。第一个数字表示小部件的第一个可见部分,第二个数字表示可见小部件的最后一个部分。

    例如,通常您会这样做,将画布和滚动条连接在一起:

    canvas = tk.Canvas(...)
    scrollbar = tk.Scrollbar(..., command=canvas.xview)
    canvas.configure(xscrollcommand=scrollbar.set)
    

    相反,创建自己的命令来调用 scrollbar.set 方法,然后执行您希望它执行的任何其他操作。它看起来像这样:

    def handle_scroll(x0, x1):
        hsb.set(x0, x1)
        if float(x1) > .9:
            ...
    
    canvas = tk.Canvas(...)
    scrollbar = tk.Scrollbar(..., command=canvas.xview)
    canvas.configure(xscrollcommand=handle_scroll)
    
        2
  •  1
  •   Programer Beginner    7 年前

    tkinter滚动条有一个简单的获取方法( more info scrollbar.get() . 每当用户移动滚动条时,我都会与 if scrollbar.get()[1] > 0.9: . 有了这个方法,我可以在滚动条打开时执行我的东西 逼近 最右边的 位置。