Найти - Пользователи
Полная версия: lambda-функция и слот: проблема
Начало » GUI » lambda-функция и слот: проблема
1
python-er
Есть такой тестовый пример:

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_())

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

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

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

Всем спасибо.
Rodegast
У себя проверил всё нормально работает.
python-er
нормально работает из примера в первом посте? Через лямбда, клик на верхний хэдэр?

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

Да всё нормально. Печатает slot 123 456 (0,) и slot 123 456 (1,)
python-er
хм… А какой Пайтон и система? У меня убунту 10.10 - и хэдэр из лямбда не работает.
Rodegast
Python 2.5, PyQt 4.4, Deb lenny.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB