Как найти излучатель Spinbox из сигнала valueChanged?

У меня есть несколько Spinbox, и я хочу, чтобы они меняли цвет фона при изменении значения.

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

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

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

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

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


person Hubschr    schedule 23.01.2014    source источник


Ответы (2)


self.sender() является счетчиком, излучающим сигнал. Вы фактически вызываете doubleSpinBox_1.text(), что, конечно же, дает вам текст в счетчике.

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

person three_pineapples    schedule 23.01.2014

Вы можете просто использовать оператор 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 (это будет то же самое, что и имя их атрибута).

person ekhumoro    schedule 23.01.2014