Pyqt5 как сделать так, чтобы флажок блокировал два Qsliders вместе [закрыто]

0

Вопрос

Я создал графический интерфейс, используя Qt Designer, работающий на python здесь

Как я могу добавить код в свой проект, чтобы добавить флажок, который блокирует (их значения изменяются вместе, какими бы они ни были. диапазон от 0 до 100) оба моих Qsliders вместе. Смотрите рисунок ниже.

Пожалуйста, не стесняйтесь спрашивать, нужна ли дополнительная информация.

New design

pyqt5
2021-11-23 21:45:45
1

Лучший ответ

1

Вы бы подключили каждый слайдер valueChanged сигнал другому setValue прорезать, когда флажок установлен, и отключиться, когда флажок снят.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Template(QWidget):

    def __init__(self):
        super().__init__()
        vbox = QVBoxLayout(self)
        vbox.addWidget(QSlider(Qt.Horizontal))
        vbox.addWidget(QCheckBox('Lock', toggled=self.toggleLocked))
        vbox.addWidget(QSlider(Qt.Horizontal))

    def toggleLocked(self, state):
        s1, s2 = self.findChildren(QSlider)
        if state:
            s2.setValue(s1.value())
            s1.valueChanged[int].connect(s2.setValue)
            s2.valueChanged[int].connect(s1.setValue)
        else:
            s1.valueChanged[int].disconnect()
            s2.valueChanged[int].disconnect()        
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Template()
    window.show()
    sys.exit(app.exec_())
2021-11-25 02:45:39

Спасибо, еще один вопрос, как сделать пропорциональную блокировку, как в аудиомикшере? при блокировке они остаются на тех же значениях, что и перед блокировкой. Как и в слайдере, набор 50. слайд В набор 10. Таким образом, до тех пор, пока значение слайдера не достигнет 100 и 10, они оба будут равны 10 и останутся заблокированными, пока не будет сказано иначе ?
Love-to-Make

@Love-to-Make Я не понимаю твоего примера. Если вы хотите, чтобы они двигались пропорционально, то это будет зависеть от соотношения их значений, в данном случае 5/1 или 1/5.
alec

Я не знаю, как еще это описать. ваш пример работает нормально .если slider_A установлен на 75, а slide_B-на 80, и я нажимаю кнопку блокировки, я хочу, чтобы она оставалась в этом соотношении до тех пор, пока они снова не выстроятся в линию, перемещая любой из ползунков. например, нажмите и перетащите slide_A на 100. slide_B будет двигаться вверх и сначала дойдет до 100 и останется там, пока slide_A не доберется туда и наоборот
Love-to-Make

@Love-to-Make Хорошо и просто для ясности, если slider_A перемещен на 60, должен ли slider_B переместиться на 64 (A * 80/75) или на 65 (A + 5)?
alec

Нет, ползунки можно было бы очень легко установить в совершенно другом количестве, например, на слайде A установить 10, а на слайде B установить 50.
Love-to-Make

Или сдвиньте A на 100 и сдвиньте B на 25 при нажатии на одну блокировку они остаются такими же, как у pavucontrol, с левым и правым балансом на аудиоканалах
Love-to-Make

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................