Найти - Пользователи
Полная версия: PyQT. Сигналы QTableView
Начало » GUI » PyQT. Сигналы QTableView
1
Psixo
Что-то не могу разобраться с привязкой методов для сигналов таблицы. В ниже приведенном коде успешно обрабатывается только сигнал 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_())
truporez
У QTableView нет сигнала cellChanged. Используйте сигнал модели QStandardItemModel
itemChanged.
Подключение к сигналам удобнее писать в новом, которому уже года три, не меньше, стиле.
self.table.clicked.connect(self.on_click)
Psixo
truporez, спасибо за подсказку! Такой стиль подключения к сигналам не встречал в исходниках, которые разбираю для понимания PyQT.
self.model.itemChanged.connect(self.cell_changed)
Работает как надо.
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