Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 6, 2013 05:26:00

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сигналы QTableView

Что-то не могу разобраться с привязкой методов для сигналов таблицы. В ниже приведенном коде успешно обрабатывается только сигнал 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)

Офлайн

#2 Фев. 6, 2013 06:39:59

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

PyQT. Сигналы QTableView

У QTableView нет сигнала cellChanged. Используйте сигнал модели QStandardItemModel
itemChanged.
Подключение к сигналам удобнее писать в новом, которому уже года три, не меньше, стиле.

self.table.clicked.connect(self.on_click)



Офлайн

#3 Фев. 6, 2013 07:00:13

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сигналы QTableView

truporez, спасибо за подсказку! Такой стиль подключения к сигналам не встречал в исходниках, которые разбираю для понимания PyQT.

self.model.itemChanged.connect(self.cell_changed)
Работает как надо.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version