2016-08-25 9 views
0

3つ以上のスライダが必要です。だから、現時点では、各スライダに3つの異なるchangeValuesメソッドがあります。PyQt、複数のスライダに対して1つのchangeValueメソッドを使用する方法はありますか?

initUI(自己)で

、私は3つのスライダがあります

その後、私は3つのchangeValueのメソッドを持ってい
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) 

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 

ので許すまだ1株changeValueメソッドを使用してする方法があります個別に異なる範囲の変数を割り当てるには?

おかげ

+0

は、すべての信号および変数を取り除く、とばかりスライダーから直接値を読み取る取得します。 – ekhumoro

答えて

0

はい、あなたは同じスロットにすべてのスライダー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.... 
+0

すべてのスロットが同じことをする場合、送信者を識別する必要さえもありません。しかし、あなたの答えは私の提案にもなります。 – tobilocker

+0

ありがとうございます。私はこれが私の必要と思う。クイック追加質問。その場合、スライダと他のウィジェットの両方を混在させることができますか? QLineを1つのボックスにまとめて編集しますか? –

+0

私が正しく理解していれば、はい。異なるタイプの多くのウィジェットをchildredとして別のウィジェットに入れたり、同じレイアウト内に多くの異なるウィジェットを入れたりすることができます – Fabio

関連する問題