Я делаю связь между QSpinbox и QSlider.
QSpinbox имеет диапазон от -10,0 до 10,0, а QSlider имеет диапазон от -100 до 100.
Итак, значение QSlider, деленное на 10, подключается к QSpinbox и наоборот.
Я использую знак "valueChanged()" СИГНАЛА друг другу.
И я хочу набрать «3.5» в QSpinbox, в этом случае, когда я набираю только «3», значение «ValueChanged» QSpinbox меняет значение QSlider, а QSlider делает это снова. Таким образом, QSpinbox потеряет свое внимание.
Я не могу набрать «3.5» одним выстрелом.
"valueChanged()" СИГНАЛ работает слишком усердно :)
Как я могу решить эту проблему?PyQt4: Синхронизация между QSpinbox и QSlider
ответ
Сигнал valueChanged()
действительно предназначен для активного стрельбы по мере его изменения. Если вы хотите, сигнал срабатывает, когда редактирование завершено, есть сигнал, специально для этого называется editingFinished
: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qabstractspinbox.html#editingFinished
Вы можете не заметить, потому что его член суперкласса QAbstractSpinBox. Обратите внимание, что этот сигнал загорается, когда виджет теряет фокус или пользователь попадает в него. Если это не то поведение, в котором вы хотите, то единственным оставшимся вариантом является использование QTimer с небольшой задержкой, которая перезапускается каждый раз valueChanged
, а когда пользователь ждет достаточно долго, тайм-аут фактически обновит ваш слайдер.
Я также заметил, что вы пытаетесь использовать нецелые значения с QSpinBox, который предназначен для ints. Возможно, вы захотите попробовать QDoubleSpinBox, который предназначен для плавающей точности. valueChange()
может вести себя немного лучше, ожидая десятичного. Хотя я просто догадываюсь, так как я не тестировал его: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdoublespinbox.html
Я изменил «valueChanged» на «editFinished». Спасибо! –