How To Programmatically Change/update Data In Python Pyqt4 Tableview?
I would like to have a table within a QWidget window and update the table each time the user enters a value in the lineEdit field. How do I do this programmatically? status: I am g
Solution 1:
You need to implement Model View Programming for this. Python Model View Programming is fairly simple.
Attach a Model to your TableView , and take the input in your LineEdit and insert it into the model, and rest of the work will be taken care of.
from PyQt4 import QtGui , QtCore
import sys
classABCTableModel(QtCore.QAbstractTableModel):
def__init__(self,data,parent=None):
QtCore.QAbstractTableModel.__init__(self,parent)
self.__data=data # Initial DatadefrowCount( self, parent ):
returnlen(self.__data)
defcolumnCount( self , parent ):
returnlen(self.__data[])
defdata ( self , index , role ):
if role == QtCore.Qt.DisplayRole:
row = index.row()
column = index.column()
value = self.__data[row][column]
return QtCore.QString(str(value))
defsetData(self, index, value):
self.__data[index.row()][index.column()] = value
returnTruedefflags(self, index):
return QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsSelectable
definsertRows(self , position , rows , item , parent=QtCore.QModelIndex()):
# beginInsertRows (self, QModelIndex parent, int first, int last)
self.beginInsertRows(QtCore.QModelIndex(),len(self.__data),len(self.__data)+1)
self.__data.append(item) # Item must be an array
self.endInsertRows()
returnTrueclassUi_MainWindow(QtGui.QMainWindow , QtGui.QWidget):
def__init__(self):
QtGui.QMainWindow.__init__(self,None)
QtGui.QWidget.__init__(self,None)
defsetupUi(self, MainWindow):
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.tableView = QtGui.QTableView(self.centralwidget)
self.tableModel=ABCTableModel([[1,2,3],[2,3,4],[4,5,6]])
self.tableView.setModel(self.tableModel)
self.lineEdit_1 = QtGui.QlineEdit(self.centralwidget)
self.lineEdit_2 = QtGui.QlineEdit(self.centralwidget)
self.lineEdit_3 = QtGui.QlineEdit(self.centralwidget)
self.tableModel.insertRows(self.lineEdit_1.text(),self.lineEdit_2.text(), self.lineEdit_3.text())
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object.
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Post a Comment for "How To Programmatically Change/update Data In Python Pyqt4 Tableview?"