【问题标题】:Tkinter | How to detect tkinter scrollbar position near the endTkinter |如何检测接近尾端的tkinter滚动条位置
【发布时间】:2019-05-22 15:27:02
【问题描述】:

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

【问题讨论】:

  • event.x 显示鼠标位置
  • @MediaEU 哦...我明白了。那么现在它很有意义......

标签: python tkinter scrollbar infinite-scroll


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2015-04-03
      • 2016-07-07
      • 2020-07-07
      相关资源
      最近更新 更多