Ткинтер |Как определить положение полосы прокрутки tkinter ближе к концу - PullRequest
0 голосов
/ 22 декабря 2018

Я знаю, что вы можете получить положение полосы прокрутки, если я свяжу кадр, которым полоса прокрутки управляет, с функцией (onFrameConfigure), подобной этой: self.calendar_frame.bind("<Configure>", self.onFrameConfigure), и из event в onFrameConfigure(self, event): я могу получить некоторые x значение полосы прокрутки event.x.Я думал, что значение показывает расположение полосы прокрутки в пикселях, поэтому с этой логикой, если я прокручиваю до максимальной правой стороны, я должен получить то же значение (или аналогичное значение), что и ширина полосы прокрутки, но из теста ниже я получилв противном случае:

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

(приведенный выше результат возможен только в том случае, если полоса прокрутки направлена ​​на максимум вправо )

Не вижу способа использовать это значение для определениянаходится ли полоса прокрутки в правом конце .

Мой вопрос: как я могу определить, когда полоса прокрутки достигла конца одной из полос прокрутки конца?

Еще лучше было бы обнаружить, когда полоса прокрутки близка к концу, потому что для моей цели (см. Цель моего проекта здесь: здесь ) Iнужно что-то сработать прямо перед тем, как полоса прокрутки достигнет максимального значения.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Если вы хотите знать, когда прокручиваемый виджет прокручивается к краю, самое простое решение - вызвать пользовательскую команду, а не вызывать метод 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)
0 голосов
/ 22 декабря 2018

Существует простой метод get для полосы прокрутки tkinter ( больше информации ), который можно использовать так: scrollbar.get().Всякий раз, когда полоса прокрутки перемещается пользователем, я просто проверяю с помощью if scrollbar.get()[1] > 0.9:.С помощью этого метода я могу выполнить свои вещи, когда полоса прокрутки закрывается в до крайней правой позиции.

...