The PyQt4 code porting of Model/View Tutorial exam

The PyQt4 code porting of Model/View Tutorial examples in Qt4.8’s Reference Documentation

 

 

2.1 A Read Only Table

 

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MyModel(QAbstractTableModel): def __init__(self, parent=None): super(MyModel, self).__init__(parent) def rowCount(self, parent = QModelIndex()): return 2 def columnCount(self,parent = QModelIndex()) : return 3 def data(self,index, role = Qt.DisplayRole) : if (role == Qt.DisplayRole): return "Row{}, Column{}".format(index.row() + 1, index.column() +1) return None if __name__ == '__main__': app =QApplication(sys.argv) tableView=QTableView() myModel = MyModel (None); tableView.setModel( myModel ); tableView.show(); sys.exit(app.exec_()) 

 

 

 

2.2 Extending the Read Only Example with Roles

 

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MyModel(QAbstractTableModel): def __init__(self, parent=None): super(MyModel, self).__init__(parent) def rowCount(self, parent = QModelIndex()): return 2 def columnCount(self,parent = QModelIndex()) : return 3 def data(self,index, role) : row = index.row() col = index.column() print("Row {}, Column {}, role {}".format(index.row() + 1, index.column() +1, role)) if role ==Qt.DisplayRole: if (row == 0 and col == 1) :return "<--left" if (row == 1 and col == 1) :return "right-->" return "Row{}, Column{}, role{}".format(index.row() + 1, index.column() +1, role) if role== Qt.FontRole: if (row == 0 and col == 0) : boldFont=QFont() boldFont.setBold(True) return boldFont; if role== Qt.BackgroundRole: if (row == 1 and col == 2) : redBackground=QBrush (Qt.red) return redBackground; if role== Qt.TextAlignmentRole: if (row == 1 and col == 1) : return Qt.AlignRight + Qt.AlignVCenter; if role== Qt.CheckStateRole: if (row == 1 and col == 0) : return Qt.Checked; return None if __name__ == '__main__': app =QApplication(sys.argv) tableView=QTableView() myModel = MyModel (None) tableView.setModel( myModel ) tableView.show() sys.exit(app.exec_()) 

 

2.3 A Clock inside a Table Cell


import sys

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtNetwork import *

from PyQt5.QtWidgets import *



class MyModel(QAbstractTableModel):


    def __init__(self, parent=None):

        super().__init__(parent)

        timer = QTimer(self)

        timer.setInterval(1000)

        timer.timeout.connect(self.timerHit)

        timer.start()


    def timerHit(self):

        topLeft = self.createIndex(0, 0)

        self.dataChanged.emit(topLeft, topLeft)


    def data(self, index, role=Qt.DisplayRole):

        row = index.row()

        col = index.column()

        if role == Qt.DisplayRole:

            if (row == 0 and col == 0):

                return QTime.currentTime().toString()

            return None


    def rowCount(self, parent=QModelIndex()):

        return 2


    def columnCount(self, parent=QModelIndex()):

        return 3

if __name__ == '__main__':

    app = QApplication(sys.argv)

    tableView = QTableView()

    myModel = MyModel(None)

    tableView.setModel(myModel)

    tableView.show()

    sys.exit(app.exec_())


 

2.4 Setting up Headers for Columns and Rows

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MyModel(QAbstractTableModel): def __init__(self, parent=None): super(MyModel, self).__init__(parent) def rowCount(self, parent = QModelIndex()): return 2 def columnCount(self,parent = QModelIndex()) : return 3 def data(self,index, role = Qt.DisplayRole) : if (role == Qt.DisplayRole): return "Row{}, Column{}".format(index.row() + 1, index.column() +1) return None def headerData(self, section, orientation,role) : if (role == Qt.DisplayRole): if (orientation == Qt.Horizontal) : if section == 0: return ("first"); elif section == 1: return ("second"); elif section == 2: return ("third"); return None if __name__ == '__main__': app =QApplication(sys.argv) tableView=QTableView() myModel = MyModel (None); tableView.setModel( myModel ); tableView.show(); sys.exit(app.exec_())2.5 The Minimal Editing Exampleimport sys from PyQt4.QtGui import * from PyQt4.QtCore import * COLS= 3; ROWS= 2 class MyModel(QAbstractTableModel): editCompleted = pyqtSignal(str) def __init__(self, parent=None): super(MyModel, self).__init__(parent) self.m_gridData=[['' for column in range(COLS)] for row in range(ROWS)] def rowCount(self, parent = QModelIndex()): return ROWS def columnCount(self,parent = QModelIndex()) : return COLS def data(self,index, role = Qt.DisplayRole) : if (role == Qt.DisplayRole): return self.m_gridData[index.row()][index.column()] return None def headerData(self, section, orientation,role) : if (role == Qt.DisplayRole): if (orientation == Qt.Horizontal) : if section == 0: return ("first"); elif section == 1: return ("second"); elif section == 2: return ("third"); return None def setData(self, index,value,role= Qt.EditRole): if (role == Qt.EditRole): self.m_gridData[index.row()][index.column()] = str(value) result='' for row in range(ROWS) : for col in range(COLS) : result += self.m_gridData[row][col] + " " self.editCompleted.emit ( result ); return True def flags(self, index): return Qt.ItemIsSelectable Qt.ItemIsEditable Qt.ItemIsEnabled ; class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) tableView=QTableView(self) self.setCentralWidget(tableView); myModel = MyModel (self) tableView.setModel( myModel ); myModel.editCompleted.connect(self.setWindowTitle) def showWindowTitle(self, title): self.setWindowTitle(title); if __name__ == '__main__': app =QApplication(sys.argv) w=MainWindow() w.show(); sys.exit(app.exec_()) 

3.1 TreeView

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) treeView=QTreeView(self) self.setCentralWidget(treeView); standardModel = QStandardItemModel(self) preparedRow =self.prepareRow("first", "second", "third"); item = standardModel.invisibleRootItem(); item.appendRow(preparedRow); secondRow =self.prepareRow("111", "222", "333") preparedRow[0].appendRow(secondRow); treeView.setModel(standardModel); treeView.expandAll(); def prepareRow(self, first,second,third): rowItems=[QStandardItem(first), QStandardItem(second), QStandardItem(third)] return rowItems; if __name__ == '__main__': app =QApplication(sys.argv) w=MainWindow() w.show(); sys.exit(app.exec_()) 

 

3.2 Working with Selections

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.treeView=QTreeView(self) self.setCentralWidget(self.treeView); standardModel = QStandardItemModel(self) rootNode = standardModel.invisibleRootItem(); americaItem = QStandardItem("America"); mexicoItem = QStandardItem("Canada"); usaItem = QStandardItem("USA"); bostonItem = QStandardItem("Boston"); europeItem = QStandardItem("Europe"); italyItem = QStandardItem("Italy"); romeItem = QStandardItem("Rome"); veronaItem = QStandardItem("Verona"); rootNode. appendRow(americaItem); rootNode. appendRow(europeItem); americaItem. appendRow(mexicoItem); americaItem. appendRow(usaItem); usaItem. appendRow(bostonItem); europeItem. appendRow(italyItem); italyItem. appendRow(romeItem); italyItem. appendRow(veronaItem); self.treeView.setModel(standardModel) self.treeView.expandAll() selectionModel= self.treeView.selectionModel() selectionModel.selectionChanged.connect(self.selectionChangedSlot) def selectionChangedSlot(self, newSelection, oldSelection): index = self.treeView.selectionModel().currentIndex(); selectedText = str(index.data(Qt.DisplayRole)) hierarchyLevel=1; seekRoot = index; while(seekRoot.parent() != QModelIndex()): seekRoot = seekRoot.parent(); hierarchyLevel+=1; showString = "{}, Level {}".format(selectedText, hierarchyLevel); self.setWindowTitle(showString); if __name__ == '__main__': app =QApplication(sys.argv) w=MainWindow() w.show(); sys.exit(app.exec_())

评论

© ID4333709 | Powered by LOFTER