2014-01-23 3 views
1

У меня есть несколько Spinboxes, и я хочу, чтобы они меняли цвет фона, если значение изменено.Как найти эмиттер Spinbox из valueChanged Signal?

С помощью этой команды подключения:

self.doubleSpinBox_1.valueChanged.connect(self.color) 

Моя первая попытка была:

def color(self): 
    send = self.sender() 
    emitter = send.text() 

Проблема заключается в том, что "send.text()" возвращает измененное значение, а не ведьма со счётчиком передал сигнал. В документации о QDoubleSpinBox я искал что-то вроде «setName» или что-то, что бы определить мой отправитель-spinbox, но я ничего не нашел.

ответ

4

self.sender() спинбокс, который излучает сигнал. Вы эффективно звоните doubleSpinBox_1.text(), который, конечно же, дает вам текст в спинбоксе.

Так что просто напишите mySpinBox = self.sender(), и вы будете правы.

2

Вы можете просто использовать оператор is для идентификации отправителя:

def color(self): 
    spinbox = self.sender() 
    if spinbox is self.doubleSpinBox_1: 
     # do something with doubleSpinBox_1 
    elif spinbox is self.doubleSpinBox_2: 
     # do something with doubleSpinBox_1 
    ... 

Но если действительно сделать хотите дать виджеты имя, вы можете использовать setObjectName для этого:

self.doubleSpinBox_1.setObjectName('spinbox1') 
    print(self.doubleSpinBox_1.objectName()) 

PS: если ваши виджеты были созданы с помощью Qt Designer, они автоматически будут иметь свой набор objectName (он будет таким же, как и имя атрибута).

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