Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 19, 2012 10:14:55

python-er
От:
Зарегистрирован: 2012-02-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

Есть такой тестовый пример:

import sys
from PyQt4 import QtGui, QtCore

class Table(QtGui.QTableWidget):
def __init__(self, parent=None):
QtGui.QTableWidget.__init__(self, parent)

for i in xrange(2):
self.insertRow(i)

for i in xrange(2):
self.insertColumn(i)

for i in xrange(2):
for j in xrange(2):
item = QtGui.QTableWidgetItem()
item.setText(str(i+j))
self.setItem(i,j,item)


slot = lambda *args: self._slot('123', ‘456’, args)
self.connect(self.horizontalHeader(), QtCore.SIGNAL('sectionClicked (int)'), slot)
#self.connect(self.horizontalHeader(), QtCore.SIGNAL('sectionClicked (int)'), self._slot)

self.connect(self, QtCore.SIGNAL('cellClicked(int, int)'), slot)

def _slot(self, a1, a2, args):
print ‘slot’, a1, a2, args


if __name__ == “__main__”:
app = QtGui.QApplication(sys.argv)

widget = Table()
widget.show()

sys.exit(app.exec_())

Должен обрабатываться клик по верхнему заголовку. Но через лямбда не работает. При этом щелчок по самой таблице работает через лямбда. Где собака зарыта?



Офлайн

#2 Фев. 19, 2012 11:07:13

dartNNN
От:
Зарегистрирован: 2009-12-08
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

Хмммм…. Проверить сейчас я не могу, но все выглядит нормально….
А если цеплять сигнал к обычному слоту (т.е. не через лямбда), то как себя программа ведет?
Заодно проверьте, что возвращает self.horizontalHeader(), и является ли хэдер кликабельным (есть у него такое свойство).



Офлайн

#3 Фев. 19, 2012 11:26:53

python-er
От:
Зарегистрирован: 2012-02-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

лямбда нужна для того, чтобы передать в слот дополнительные аргументы - не из сигнала.

Заголовок получаю. При соединении сигнала заголовка со слотом в виде обычной функции - все работает. А через лямбда работает только таблица, а заголовок - отказывается.



Отредактировано (Фев. 19, 2012 11:33:17)

Офлайн

#4 Фев. 19, 2012 12:03:06

python-er
От:
Зарегистрирован: 2012-02-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

нашлось решение - в виде создания и предварительного (не в лямбда) вычисления атрибута класса, хранящего ссылку на заголовок-хэдэр. Т.е., где-то в дебрях Qt терялась ссылка на динамически вычисденный объект.

Может кому пригодится.

Всем спасибо.



Офлайн

#5 Фев. 19, 2012 18:58:56

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

У себя проверил всё нормально работает.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Фев. 19, 2012 19:56:37

python-er
От:
Зарегистрирован: 2012-02-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

нормально работает из примера в первом посте? Через лямбда, клик на верхний хэдэр?

у меня пайтон 2.6.6. Не работает через лямбда.



Офлайн

#7 Фев. 20, 2012 15:15:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

> нормально работает из примера в первом посте? Через лямбда, клик на верхний хэдэр?

Да всё нормально. Печатает slot 123 456 (0,) и slot 123 456 (1,)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Фев. 21, 2012 18:11:27

python-er
От:
Зарегистрирован: 2012-02-19
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

хм… А какой Пайтон и система? У меня убунту 10.10 - и хэдэр из лямбда не работает.



Офлайн

#9 Фев. 22, 2012 11:07:24

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

lambda-функция и слот: проблема

Python 2.5, PyQt 4.4, Deb lenny.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version