Форум сайта python.su
Есть такой тестовый пример:
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_())
Должен обрабатываться клик по верхнему заголовку. Но через лямбда не работает. При этом щелчок по самой таблице работает через лямбда. Где собака зарыта?
Офлайн
Хмммм…. Проверить сейчас я не могу, но все выглядит нормально….
А если цеплять сигнал к обычному слоту (т.е. не через лямбда), то как себя программа ведет?
Заодно проверьте, что возвращает self.horizontalHeader(), и является ли хэдер кликабельным (есть у него такое свойство).
Офлайн
лямбда нужна для того, чтобы передать в слот дополнительные аргументы - не из сигнала.
Заголовок получаю. При соединении сигнала заголовка со слотом в виде обычной функции - все работает. А через лямбда работает только таблица, а заголовок - отказывается.
Отредактировано (Фев. 19, 2012 11:33:17)
Офлайн
нашлось решение - в виде создания и предварительного (не в лямбда) вычисления атрибута класса, хранящего ссылку на заголовок-хэдэр. Т.е., где-то в дебрях Qt терялась ссылка на динамически вычисденный объект.
Может кому пригодится.
Всем спасибо.
Офлайн
У себя проверил всё нормально работает.
Офлайн
нормально работает из примера в первом посте? Через лямбда, клик на верхний хэдэр?
у меня пайтон 2.6.6. Не работает через лямбда.
Офлайн
> нормально работает из примера в первом посте? Через лямбда, клик на верхний хэдэр?
Да всё нормально. Печатает slot 123 456 (0,) и slot 123 456 (1,)
Офлайн
хм… А какой Пайтон и система? У меня убунту 10.10 - и хэдэр из лямбда не работает.
Офлайн
Python 2.5, PyQt 4.4, Deb lenny.
Офлайн