我知道,如果我将滚动条所控制的框架绑定到一个函数(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),我需要在触发之前滚动条达到最大末端。
答案 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)