pyqt5如何使复选框将两个Qslider锁定在一起[关闭]

Posted

技术标签:

【中文标题】pyqt5如何使复选框将两个Qslider锁定在一起[关闭]【英文标题】:pyqt5 how to make a checkbox lock two Qsliders together [closed] 【发布时间】:2021-11-23 21:45:45 【问题描述】:

我使用在 python here 中运行的 Qt Designer 制作了一个 GUI

如何在我的项目中添加代码以添加一个复选框,该复选框将我的 Qslider 锁定在一起(无论它们的值是什么,0 - 100 范围)。见下图。

如果需要更多信息,请随时询问。

【问题讨论】:

“锁定”是指禁用两个滑块,还是同时更改它们的值? 嗨,好点。我已经编辑了原始帖子。我的意思是让他们的价值观一起改变,不管他们是什么。 0-100 范围 【参考方案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_())

【讨论】:

谢谢另一个问题 我如何使它像在混音器中一样成为比例锁定?锁定时,它们在锁定前保持相同的值。与滑块 A 设置 50 一样。滑块 B 设置 10。所以直到滑块 A 的值达到 100 和 10 之前,它们都将是 10 并保持锁定状态,直到另行通知? @Love-to-Make 我不明白你的例子。如果您希望它们按比例移动,那么这将是它们的值的比率,在本例中为 5/1 或 1/5。 我不确定如何描述它。您的示例工作正常。如果slider_A 设置为75,slide_B 设置为80,我单击锁定按钮,我希望它保持该比率,直到它们通过我移动任何滑块再次排列。例如,单击并将 slide_A 拖动到 100。slide_B 将向上移动并首先到达 100 并停留在那里直到 slide_A 到达那里,反之亦然 @Love-to-Make 好的,为了清楚起见,如果 slider_A 移动到 60,slider_B 应该移动到 64 (A * 80 / 75) 还是 65 (A + 5)?跨度> 不,滑块可以很容易地以完全不同的数量坐下,就像幻灯片 A 设置为 10 和幻灯片 B 设置为 50。

以上是关于pyqt5如何使复选框将两个Qslider锁定在一起[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用样式表更改 QSlider 句柄宽度

PyQt5:添加lineEdit的子类QSlider(用于在QtDesigner中提升)?

PyQt5 - 实时 QSlider

PyQt5:QSlider valueChanged 事件延迟

如何使 QSlider 只读?

PyQt5-QSlider(滑动条)控件使用