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

时间:2018-12-22 15:28:41

标签: python tkinter scrollbar infinite-scroll

我知道,如果我将滚动条所控制的框架绑定到一个函数(onFrameConfigure,并从self.calendar_frame.bind("<Configure>", self.onFrameConfigure)event中,就可以得到滚动条的位置。 onFrameConfigure(self, event):我可以获得滚动条event.x some 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 个答案:

答案 0 :(得分:0)

tkinter滚动条(more info)有一个简单的get方法,可以像这样使用:scrollbar.get()。每当用户移动滚动条时,我只需使用if scrollbar.get()[1] > 0.9:进行检查。使用此方法,当滚动条关闭最右位置时,我可以执行我的任务。

答案 1 :(得分:0)

如果您想知道何时将滚动的小部件向边缘滚动,最简单的解决方案是调用自定义命令,而不是调用相关滚动条的set方法。该命令本身可以调用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)