当滚动条在用户将近一半的位置时,如何自动获取滚动条的位置,以便调用其他功能?
How to get position of scrollbar automatically when a scrollbar is at position at nearly half way by the user so that it can call other function?
我想创建一个功能,当用户位于 scrollbar.It 上的特定位置时我们可以自动激活它就像我想创建一个结果页面,当用户只在某个位置时自动加载更多结果离结束有点远,但我不知道如何获取它 automatically.I 可以通过使用 scrollbar.get 方法获取 scollbar 的位置,但是如何检查 scollbar 何时被用户移动?
如果您只希望在他们使用滚动条时有这种特殊行为,而不是在他们使用向上翻页、向下翻页或鼠标滚轮时,您可以让滚动条调用代理而不是文本小部件的 yview
方法。
代理需要正常调用yview
命令,然后才能执行自动加载功能。
例如,您可以获得最后一个可见行的索引,然后将其与目标行进行比较,例如 fifth-to-last 行。如果最后一条可见线超过目标,则加载另一页。
示例:
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()
注意:如果您想要此 auto-load 功能,无论用户如何滚动小部件(滚动条、鼠标滚轮、键盘),请使用代理代替 vsb.set
而不是代替text.yview
。这样,每次小部件的内容发生变化或滚动时都会调用该函数。
我想创建一个功能,当用户位于 scrollbar.It 上的特定位置时我们可以自动激活它就像我想创建一个结果页面,当用户只在某个位置时自动加载更多结果离结束有点远,但我不知道如何获取它 automatically.I 可以通过使用 scrollbar.get 方法获取 scollbar 的位置,但是如何检查 scollbar 何时被用户移动?
如果您只希望在他们使用滚动条时有这种特殊行为,而不是在他们使用向上翻页、向下翻页或鼠标滚轮时,您可以让滚动条调用代理而不是文本小部件的 yview
方法。
代理需要正常调用yview
命令,然后才能执行自动加载功能。
例如,您可以获得最后一个可见行的索引,然后将其与目标行进行比较,例如 fifth-to-last 行。如果最后一条可见线超过目标,则加载另一页。
示例:
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()
注意:如果您想要此 auto-load 功能,无论用户如何滚动小部件(滚动条、鼠标滚轮、键盘),请使用代理代替 vsb.set
而不是代替text.yview
。这样,每次小部件的内容发生变化或滚动时都会调用该函数。