当前位置:   article > 正文

Hello PyQt5(四)PyQt5高级窗口组件_pyqt5 qstandarditemmodel

pyqt5 qstandarditemmodel

一、QTableView

1、QTableView简介

QTableView可以使用自定义的数据模型来显示内容,通过setModel绑定数据源,由QAbstractItemView类定义的接口来实现,使其能够显示由QAbstractItemModel类派生的模型提供的数据。

2、标准模型

QStringListModel 字符串链表数据模型

QStandardItemModel标准数据项模型,存储任意结构层次的数据

QDirModel 文件系统目录模型

QSqlQueryModel SQL查询结果集数据模型

QSqlTableModel SQL表格数据模型

QSqlRelationTableModel 关系型SQL表格数据模型

QSortFilterProxyModel 排序过滤代理模型

3、QTableView实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QTableView, QHBoxLayout
  3. from PyQt5.QtGui import QStandardItemModel,QStandardItem
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.model = QStandardItemModel(4, 4)
  8.         headers = ["column1", "column2", "column3", "column4"]
  9.         self.model.setHorizontalHeaderLabels(headers)
  10.         self.tableView = QTableView(self)
  11.         # 最后一列拉伸
  12.         self.tableView.horizontalHeader().setStretchLastSection(True)
  13.         self.tableView.setModel(self.model)
  14.         self.layout = QHBoxLayout()
  15.         self.layout.addWidget(self.tableView)
  16.         self.setLayout(self.layout)
  17.     def initUI(self):
  18.         # 数据项增加
  19.         for row in range(10):
  20.             for column in range(4):
  21.                 item = QStandardItem()
  22.                 item.setText(str(column))
  23.                 self.model.setItem(row, column, item)
  24.         # 增加一行
  25.         for row in range(5):
  26.             items = []
  27.             for column in range(4):
  28.                 items.append(QStandardItem(str(column)))
  29.             self.model.appendRow(items)
  30. if __name__ == "__main__":
  31.     app = QApplication(sys.argv)
  32.     window = MainWidget()
  33.     window.initUI()
  34.     window.resize(400, 200)
  35.     window.show()
  36.     sys.exit(app.exec_())

二、QTreeView

1、QTreeView简介

QTreeView是一种树形结构的视图,继承自QAbstractItemView,是Model/View框架的一部分。

2、QTreeView实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QTreeView, QHBoxLayout
  3. from PyQt5.QtGui import QStandardItemModel,QStandardItem
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.model = QStandardItemModel()
  8.         self.treeView = QTreeView(self)
  9.         self.treeView.setModel(self.model)
  10.         self.layout = QHBoxLayout()
  11.         self.layout.addWidget(self.treeView)
  12.         self.setLayout(self.layout)
  13.     def initUI(self):
  14.         root = self.model.invisibleRootItem()
  15.         for i in range(4):
  16.             item = QStandardItem(str(i))
  17.             for j in range(3):
  18.                 chidItem = QStandardItem(str(j))
  19.                 item.setChild(j, chidItem)
  20.             root.setChild(i, item)
  21. if __name__ == "__main__":
  22.     app = QApplication(sys.argv)
  23.     window = MainWidget()
  24.     window.initUI()
  25.     window.resize(400, 200)
  26.     window.show()
  27.     sys.exit(app.exec_())

三、QListView

1、QListView简介

QListView是列表视图,继承自QAbstractItemView,不显示表头和表框,为Qt的Model/View结构提供了更灵活的方式。

2、QListView实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QListView, QHBoxLayout
  3. from PyQt5.QtGui import QStandardItemModel,QStandardItem
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.model = QStandardItemModel()
  8.         self.listView = QListView(self)
  9.         self.listView.setModel(self.model)
  10.         self.layout = QHBoxLayout()
  11.         self.layout.addWidget(self.listView)
  12.         self.setLayout(self.layout)
  13.     def initUI(self):
  14.         root = self.model.invisibleRootItem()
  15.         for i in range(10):
  16.             item = QStandardItem(str(i))
  17.             root.setChild(i, item)
  18. if __name__ == "__main__":
  19.     app = QApplication(sys.argv)
  20.     window = MainWidget()
  21.     window.initUI()
  22.     window.resize(400, 200)
  23.     window.show()
  24.     sys.exit(app.exec_())

四、QTableWidget

1、QTableWidget简介

 QTableWidget表格单元组件继承自QTableView,QTableView可以使用自定义的数据模型来显示内容,而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的,QTableWidgetItem用来表示表格中的一个单元格,整个表格都需要用逐个单元格构建起来。

2、QTableWidget实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTableWidget, QTableWidgetItem
  3. from PyQt5.QtCore import Qt
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.tableWidget = QTableWidget(self)
  8.         self.layout = QHBoxLayout()
  9.         self.layout.addWidget(self.tableWidget)
  10.         self.setLayout(self.layout)
  11.     def initUI(self):
  12.         self.tableWidget.setRowCount(10)
  13.         self.tableWidget.setColumnCount(5)
  14.         for row in range(10):
  15.             for column in range(5):
  16.                 item = QTableWidgetItem()
  17.                 # 设置数据项显示数据角色的数据
  18.                 item.setData(Qt.DisplayRole, column)
  19.                 self.tableWidget.setItem(row, column, item)
  20. if __name__ == "__main__":
  21.     app = QApplication(sys.argv)
  22.     window = MainWidget()
  23.     window.initUI()
  24.     window.resize(400, 200)
  25.     window.show()
  26.     sys.exit(app.exec_())

五、QTreeWidget

1、QTreeWidget简介

QTreeWidget树形单元组件继承自QTreeView类,可以用来来创建简单地树形结构列表。通过QTreeWidget类和QTreeWidgetItem类实现树形结构,QTreeWidgetItem类实现结点的添加。

2、QTreeWidget实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItem
  3. from PyQt5.QtCore import Qt
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.treeWidget = QTreeWidget(self)
  8.         self.layout = QHBoxLayout()
  9.         self.layout.addWidget(self.treeWidget)
  10.         self.setLayout(self.layout)
  11.     def initUI(self):
  12.         root = self.treeWidget.invisibleRootItem()
  13.         for row in range(4):
  14.             item = QTreeWidgetItem()
  15.             item.setData(0, Qt.DisplayRole, row)
  16.             root.addChild(item)
  17.             # 设置数据项显示数据角色的数据
  18.             root.addChild(item)
  19.             for column in range(3):
  20.                 child = QTreeWidgetItem()
  21.                 child.setData(0, Qt.DisplayRole, column)
  22.                 item.addChild(child)
  23. if __name__ == "__main__":
  24.     app = QApplication(sys.argv)
  25.     window = MainWidget()
  26.     window.initUI()
  27.     window.resize(400, 200)
  28.     window.show()
  29.     sys.exit(app.exec_())

六、QListWidget

1、QListWidget简介

QListWidget列表单元组件继承自QListView,可以显示一个列表,列表中的每个项是QListWidgetItem的一个实例,每个项可以通过QListWidgetItem来操作。可以通过QListWidgetItem来设置每个项的图像与文字。

2、QListWidget实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QListWidget, QListWidgetItem
  3. from PyQt5.QtCore import Qt
  4. class MainWidget(QWidget):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         self.listWidget = QListWidget(self)
  8.         self.layout = QHBoxLayout()
  9.         self.layout.addWidget(self.listWidget)
  10.         self.setLayout(self.layout)
  11.     def initUI(self):
  12.         for i in range(10):
  13.             item = QListWidgetItem()
  14.             # 设置数据项显示数据角色的数据
  15.             item.setData(Qt.DisplayRole, i)
  16.             self.listWidget.addItem(item)
  17. if __name__ == "__main__":
  18.     app = QApplication(sys.argv)
  19.     window = MainWidget()
  20.     window.initUI()
  21.     window.resize(400, 200)
  22.     window.show()
  23.     sys.exit(app.exec_())

七、QStackedWidget

1、QStackedWidget简介

QStackedWidget是栈式容器组件,开发人员可以使用栈管理控件,QStackedWidget只显示栈顶的控件,使用raiseWidget函数把栈中任何其他控件移到栈顶,从而实现控件之间的切换。

2、QStackedWidget实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QStackedWidget, QPushButton
  3. class MainWidget(QWidget):
  4.     currentIndex = 0
  5.     N = 5
  6.     def __init__(self, parent=None):
  7.         super().__init__(parent)
  8.         self.stackWidget = QStackedWidget(self)
  9.         self.layout = QVBoxLayout()
  10.         button = QPushButton("Next")
  11.         button.clicked.connect(self.onNext)
  12.         self.layout.addWidget(self.stackWidget)
  13.         self.layout.addWidget(button)
  14.         self.setLayout(self.layout)
  15.     def initUI(self):
  16.         for i in range(self.N):
  17.             button = QPushButton()
  18.             button.setText("Button {0}".format(i))
  19.             self.stackWidget.addWidget(button)
  20.     def onNext(self):
  21.         self.currentIndex = self.currentIndex + 1
  22.         self.currentIndex = self.currentIndex % self.N
  23.         self.stackWidget.setCurrentIndex(self.currentIndex)
  24. if __name__ == "__main__":
  25.     app = QApplication(sys.argv)
  26.     window = MainWidget()
  27.     window.initUI()
  28.     window.resize(400, 200)
  29.     window.show()
  30.     sys.exit(app.exec_())

八、QDockWidget

1、QDockWidget简介

QDockWidget是停靠窗体组件,可以作为一个顶层窗口漂浮在桌面,主要作为辅助窗体出现在界面中。QDockWidget包含工具栏和内容区域,工具栏用于显示窗口标题,一个浮动按钮和一个关闭按钮。QDockWidget可以作为子窗口部件的封装,通过setWidget()设置子窗口部件。

 2、QDockWidget实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
  3. from PyQt5.QtCore import Qt
  4. class MainWindow(QMainWindow):
  5.     def __init__(self, parent=None):
  6.         super().__init__(parent)
  7.         # central widget
  8.         self.centralWidget = QTextEdit()
  9.         self.centralWidget.setText("Main Window")
  10.         self.centralWidget.setAlignment(Qt.AlignCenter)
  11.         self.setCentralWidget(self.centralWidget)
  12.         # left dock
  13.         dock = QDockWidget("Window1", self)
  14.         dock.setFeatures(QDockWidget.DockWidgetMovable)
  15.         dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
  16.         textEdit = QTextEdit()
  17.         textEdit.setText("Window1,The dock widget can be moved between docks and users")
  18.         dock.setWidget(textEdit)
  19.         self.addDockWidget(Qt.LeftDockWidgetArea, dock)
  20.         # right dock
  21.         dock =QDockWidget("Window2", self)
  22.         dock.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetFloatable)
  23.         textEdit =QTextEdit()
  24.         textEdit.setText("Window2,The dock widget can be detac from the main window,""and float as an independent window,and can be closed")
  25.         dock.setWidget(textEdit)
  26.         self.addDockWidget(Qt.RightDockWidgetArea, dock)
  27.         # right dock
  28.         dock =QDockWidget("Window3", self)
  29.         dock.setFeatures(QDockWidget.AllDockWidgetFeatures)
  30.         textEdit = QTextEdit()
  31.         textEdit.setText("Window3,The dock widget can be closed,moved,and float")
  32.         dock.setWidget(textEdit)
  33.         self.addDockWidget(Qt.RightDockWidgetArea, dock)
  34.         self.setWindowTitle("DockWidget Demo")
  35.         self.show()
  36. if __name__ == "__main__":
  37.     app = QApplication(sys.argv)
  38.     window = MainWindow()
  39.     window.resize(400, 200)
  40.     window.show()
  41.     sys.exit(app.exec_())

 九、QMidArea

1、QMidArea简介

    QMdiArea组件是一种多文档界面,MDI即Multiple Document Interface,主要适用于完成一项工作时需要用到多个文件。QMainWindow是SDI(Signal Document Interface,单文档界面),每个开启的文件占据一个视窗,主要适用于没有太多文件的应用场景。

    QMdiSubWindow类继承自QWidget,主要用来创建MDI子窗体实例。

2、QMidArea实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMdiArea, QMdiSubWindow
  3. class MainWindow(QMdiArea):
  4.     def __init__(self, parent=None):
  5.         super().__init__(parent)
  6.         self.addSubWindow(QMdiSubWindow())
  7.         self.addSubWindow(QMdiSubWindow())
  8.         self.show()
  9. if __name__ == "__main__":
  10.     app = QApplication(sys.argv)
  11.     window = MainWindow()
  12.     window.resize(400, 200)
  13.     window.show()
  14.     sys.exit(app.exec_())

十、QScrollArea

1、QScrollArea简介

QScrollArea滚动区组件用来显示子控件的内容的框架,如果子控件的尺寸超过了框架的大小,可以使用滚动条,方便查看整个子控件。QScrollArea可以给任何QWidget添加滚动条,但一般自定义窗体添加滚动条不显示。

2、QScrollArea实例

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QPushButton, QTableView
  3. class MainWidget(QWidget):
  4.     def __init__(self, parent=None):
  5.         super().__init__(parent)
  6.         self.layout = QVBoxLayout()
  7.         # 滚动区创建
  8.         self.scrollArea = QScrollArea()
  9.         # 容器组件
  10.         widget  = QWidget()
  11.         layout = QVBoxLayout()
  12.         tableView = QTableView()
  13.         button = QPushButton("OK")
  14.         layout.addWidget(tableView)
  15.         layout.addWidget(button)
  16.         widget.setLayout(layout)
  17.         # 设置滚动区的容器组件
  18.         self.scrollArea.setWidget(widget)
  19.         self.layout.addWidget(self.scrollArea)
  20.         self.setLayout(self.layout)
  21. if __name__ == "__main__":
  22.     app = QApplication(sys.argv)
  23.     window = MainWidget()
  24.     window.resize(400, 200)
  25.     window.show()
  26.     sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/312115
推荐阅读
相关标签
  

闽ICP备14008679号