PyQt,有没有办法对多个滑块使用一个 changeValue 方法?

PyQt, Any way to use one changeValue method for multiple sliders?

我需要 3 个滑块(或更多)。所以目前,我为每个滑块设置了三种不同的 changeValues 方法。

在 initUI(self) 中,我有三个滑块:

    sigmaTitle = QtGui.QLabel('Sigma')
    sigmaSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
    sigmaSlider.setRange(0, 100)
    sigmaSlider.valueChanged[int].connect(self.sigmaChangeValue)

    dtTitle = QtGui.QLabel('Sigma')
    dtSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
    dtSlider.setRange(200, 400)
    dtSlider.valueChanged[int].connect(self.dtChangeValue)

    rTitle = QtGui.QLabel('Sigma')
    rSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
    rSlider.setRange(300, 400)
    rSlider.valueChanged[int].connect(self.rChangeValue)

然后我有三个 changeValue 方法:

def sigmaChangeValue(self, value):
    self.sigma = value / 1000.0
    print self.sigma

def dtChangeValue(self, value):
    self.dt = value / 1000.0
    print self.dt

def rChangeValue(self, value):
    self.r = value / 1000.0
    print self.r

那么有没有办法使用一个共享的 changeValue 方法并且仍然允许单独分配不同范围的变量?

谢谢

是的,您可以将所有滑块 valueChanged 信号连接到同一个插槽。 如果你需要知道哪个滑块发送了信号,你可以使用插槽内部的 QObject.sender() 方法。 参见 QObject.sender()

示例:

#create the sliders using self:
self.sigmaSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
self.sigmaSlider.setRange(0, 100)
#etc...

插槽:

def mySlot(self, value):
    if self.sender() == self.sigmaSlider:
        self.sigma = value / 1000.0
        print self.sigma
    elif self.sender() == self.dtSlider:
        #etc....