Tkinter: установить значение «шкала» без вызова обратного вызова? - PullRequest
3 голосов
/ 28 октября 2010

У меня есть графический интерфейс Tkinter, где есть объект Scale.Мне назначен обратный вызов (с помощью параметра конструктора command) для выполнения действия, когда пользователь меняет положение шкалы.Однако есть также случай, когда значение, представленное шкалой, изменяется внешне, и поэтому я устанавливаю положение шкалы с помощью Scale.set().В этом случае я хочу установить масштаб, но , а не вызывает обратный вызов, так как остальная часть программы уже знает об изменении.Тем не менее, я замечаю, что обратный вызов действительно вызывается set().

. Можно ли выполнить одно из следующих действий:

  1. Установить значение шкалы без вызова обратного вызова

  2. Различают в обратном вызове, был ли он вызван взаимодействием с пользователем или вызванным Scale.set().

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Нет ничего специально встроенного в Tkinter, чтобы решить эту проблему. Это действительно простая проблема: удалить обратный вызов, установить значение, добавить обратный вызов. Или установите глобальный флаг и проверьте его в обратном вызове.

Существуют способы решения проблемы - например, создание подкласса виджета - но на самом деле это ничего вам не даст. Просто перейдите к простому решению и перейдите к более интересным проблемам.

1 голос
/ 15 января 2019

Я столкнулся с той же проблемой, и для меня не работали ни запрещение обратного вызова, ни установка глобальной переменной для проверки состояния обратного вызова, по какой-то неясной причине, что обратный вызов продолжал вызываться после того, как мой код завершил работу.

Несмотря на это, решение, которое сработало для меня, простое: я использовал переменную в виджете и установил значение, используя метод переменной set, а не метод виджета.

value = DoubleVar()
scale = Scale(master, variable=value, command=callback)
scale.pack()

scale.set(0) #<- this triggered the callback, no matter what I tried to stop it
value.set(0) #<- this seems to work like the previous line but without any callback
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...