2013-12-17 2 views
1

Как подключить 5 QtSliders к одному слоту ?, мне нужно было бы знать, какой из них отправил сигнал «valueChanged», поэтому мне как-то нужно было бы отправить что-нибудь вроде «objectName», ,подключить несколько QSliders к одному слоту

Я не знаю Проппер способ сделать это, я сделал, что до сих пор:

for index, child in enumerate(self.ui.groupBox_2.children()): 
    try:   
     child.connect(child,SIGNAL("valueChanged(int)"), child,SLOT("valueChangedSlot(int,child.objectName)")) 

    except Exception: 
     pass 

Ничего не происходит, я не получаю какие-либо ошибки, просто ничего не происходит при перемещении слайдов.

Я забыл опубликовать также слот:

@pyqtSlot(int, str) 
def valueChangedSlot(self,value,name):  
    print value, name 
+3

QSignalMapper сделано для этого –

+0

@ratchetfreak QSignalMapper не будет работать в этом случае, так как он обрабатывает сигнал с дополнительным аргументом. –

+0

Да, это правда, я думаю в functools.partial, но я не знаю, как его использовать – codeKiller

ответ

3

Чтобы получить пославший сигнал, необходимо вызвать метод sender().

@pyqtSlot(int) 
    def supportSlot(self, newValue) : 
    slider = self.sender() 
    name = slider.objectName() 
    self.valueChangedSlot(newvalue, name) # calling your original slot 
+0

oh спасибо, выглядит просто и легко, ничего не знал об этом методе «отправитель». БЛАГОДАРЯ! – codeKiller

Смежные вопросы