Tkinter |如何检测接近末尾的 tkinter 滚动条位置

Tkinter | How to detect tkinter scrollbar position near the end

我知道,如果我将滚动条控制的框架绑定到这样的函数 (onFrameConfigure),您可以获得滚动条位置:self.calendar_frame.bind("<Configure>", self.onFrameConfigure),并从 eventonFrameConfigure(self, event): 中,我可以获得 some 滚动条的 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)我需要一些东西在滚动条到达最大端之前触发。

tkinter 滚动条 (more info) 有一个简单的获取方法,可以像这样使用:scrollbar.get()。每当用户移动滚动条时,我都会检查 if scrollbar.get()[1] > 0.9:。使用这种方法,当滚动条关闭最右边位置时,我可以执行我的东西。

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

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

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

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)