当滚动条处于用户接近一半的位置时,如何自动获取滚动条的位置,以便它可以调用其他函数



我想创建一个函数,当用户处于滚动条上的特定位置时,我们可以自动激活。这就像我想创建一个结果页面,当用户离终点有点远时,它会自动加载更多结果,但我不知道如何自动获取它。我可以使用scrollbar.get方法获取scollbar的位置,但是如何检查用户何时移动scollbar?

如果仅在他们使用滚动条时才需要此特殊行为,而不是在他们使用向上翻页、向下翻页或鼠标滚轮时,则可以让滚动条调用代理,而不是文本小部件的yview方法。

代理需要正常调用 yview 命令,然后它可以执行自动加载功能。

例如,

您可以获取最后一个可见行的索引,然后将其与目标行进行比较,例如倒数第五行。如果最后一个可见行超过目标,请加载另一个页面。

例:

import tkinter as tk
COUNT = 0
def handle_scroll(*args):
    # call the yview command to update the text widget based
    # on the scrollbar position
    text.yview(*args)
    # load another page if the user scrolls to within 5 lines
    # of the end
    maxy = text.winfo_height()
    last_visible_line = text.index("@0,{} linestart".format(maxy))
    target = text.index("end-5 lines")
    if text.compare(last_visible_line, ">", target):
        load_page()
def load_page():
    """Simulate adding a page of results"""
    global COUNT
    for i in range(30):
        COUNT += 1
        text.insert("end", "Result #{}n".format(COUNT))
root = tk.Tk()
vsb = tk.Scrollbar(root, orient="vertical", command=handle_scroll)
text = tk.Text(root,height=20, yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
# simulate loading the initial page
load_page()
tk.mainloop()

注意:如果您想要此自动加载功能,无论用户如何滚动小部件(滚动条,鼠标滚轮,键盘(,请使用代理代替vsb.set而不是代替text.yview。这样,每次小部件的内容更改或滚动时都会调用该函数。

最新更新