Форум
подписаться на последние сообщения:

PyQt4 и сигналы

l1eri
#
Добрые питоняне! Есть ли помимо функции lambda другие способы передать параметры через QtCore.SIGNAL()?

QtCore.QObject.connect(timer, QtCore.SIGNAL('timeout()'), lambda : refresh_components(mainapp, c))

... и еще вопрос - есть у меня три кнопки (QPushButton), описанные в модуле, генерируемом дизайнером. В дальнейшем мне может понадобиться динамически добавлять к ним в verticalLayout кнопки с такими же визуальными свойствами, stylesheet'ами, сигналами и прочим. Как лучше всего это осуществить?

Спасибо.
Share
Сообщение отредактировано: 30 Май 2010, 05:35
zubchick
#
можно и без лямбды, через def :D
l1eri
#
Дак через def ошибку пишет. ты пробовал?
zubchick
#
l1eri, нет не пробовал, интересно вообще с этими вызовами функции с параметрами сплошь косяки, у меня, на пример работает так:
, но не работает так:
anderson
#
zubchick, насколько я знаю lambda пишется без знака равенства. Вот так button.clicked.connect(lambda val: self.add_block(val))

demoriz
#
Можно и без лямбды, например назначив обработчиком метод а в самом методе заюзать свойство в качестве параметра.

(http://www.demoriz.ru/?p=67)
Сообщение отредактировано: 31 Май 2010, 08:17
zzz
#
насколько я знаю lambda пишется без знака равенства

Это дефолтное значение, как и в обычной функции.

Коннектить сигнал можно только к вызываемым объектам (или к слотам).
С обычными функциями бывают ошибки, когда gc не видит, что она ещё используется в qt и удаляет. С лямбдой таких проблем нет. Я долго бился, чтобы понять причину, но так и не разобрался.

Ребят, вы используете старый стиль PyQt. Я давно на нём ничего не писал, но куда правильнее будет писать как-то так:

self.lineEdit.returnPressed.connect(self.find)
Сообщение отредактировано: 31 Май 2010, 09:23
demoriz
#
>Ребят, вы используете старый стиль PyQt. Я давно на нём ничего не писал, но куда правильнее будет писать как-то так:
>self.lineEdit.returnPressed.connect(self.find)


Очень интересно, поделитесь ссылочкой на описание нового стиля? А то по PyQT вообще както бедно в плане документации, ачтоб на русском так вообще мрак. Или я просто искать не умею? :)
Сообщение отредактировано: 31 Май 2010, 09:54
l1eri
#
Помогите, не пойму в чем загвоздка. В коде



def pushpButton(self, objName):
	print objName
...

	pButtons = []
	for i in range (0, max_col):
		for j in range (0, max_row): 
			s = 'pushButton_'+str(i+1)+'_'+str(j+1)
			pButtons.append(mainapp.findChild(QtGui.QPushButton,s))
	
	for button in pButtons:
		button.clicked.connect(lambda: mainapp.pushpButton(button.objectName()))


pushpButton() всегда!! выдает имя последней кнопки, в не зависимости от того, на какую из них я бы не нажал. Будто все сигналы привязались к последней, хотя в списке pButtons ссылки идут на разные адреса.
Сообщение отредактировано: 30 Январь 2011, 12:05