Форум сайта python.su
Что-то не могу разобраться с привязкой методов для сигналов таблицы. В ниже приведенном коде успешно обрабатывается только сигнал clicked(QModelIndex) другие сигналы (пробовал разные) не обрабатываются, в данном случаи cellChanged (int,int).
Что я делаю не так?
П.С.: раньше не использоваля Python и Qt для создания gui приложений.
#! /usr/bin/env python # -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore import sys # Модель для представления табличных данных class TableModel(QtGui.QStandardItemModel): def __init__(self, parent=None): QtGui.QStandardItemModel.__init__(self, parent) pass class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.model = TableModel(self) self.model.setColumnCount(3) for row in range(0,10): for column in range(0,3): item = QtGui.QStandardItem("{0}, {1}".format(row, column)) self.model.setItem(row, column, item) self.table = QtGui.QTableView(self) self.table.setModel(self.model) self.setCentralWidget(self.table) # Сигналы self.connect(self.table, QtCore.SIGNAL("cellChanged(int,int)"), self.cell_changed) self.connect(self.table, QtCore.SIGNAL("clicked(QModelIndex)"), self.on_click) def on_click(self, index): print "on_click:", index def cell_changed(self, *args): print "cell_changed" #print "[%i][%i]"%(row, column) class App(QtGui.QApplication): def __init__(self, argv): QtGui.QApplication.__init__(self, argv) self.ui = MainWindow(None) self.ui.show() if __name__ == "__main__": app = App(sys.argv) sys.exit(app.exec_())
Отредактировано Psixo (Фев. 6, 2013 06:29:46)
Офлайн
У QTableView нет сигнала cellChanged. Используйте сигнал модели QStandardItemModel
itemChanged.
Подключение к сигналам удобнее писать в новом, которому уже года три, не меньше, стиле.
self.table.clicked.connect(self.on_click)
Офлайн
truporez, спасибо за подсказку! Такой стиль подключения к сигналам не встречал в исходниках, которые разбираю для понимания PyQT.
self.model.itemChanged.connect(self.cell_changed)
Офлайн