打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PyQt5快速入门(四)PyQt5高级窗口组件

一、QTableView

1、QTableView简介

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

2、标准模型

QStringListModel 字符串链表数据模型
QStandardItemModel标准数据项模型,存储任意结构层次的数据
QDirModel 文件系统目录模型
QSqlQueryModel SQL查询结果集数据模型
QSqlTableModel SQL表格数据模型
QSqlRelationTableModel 关系型SQL表格数据模型
QSortFilterProxyModel 排序过滤代理模型

3、QTableView实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QTableView, QHBoxLayoutfrom PyQt5.QtGui import QStandardItemModel,QStandardItemclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.model = QStandardItemModel(4, 4)        headers = ["column1", "column2", "column3", "column4"]        self.model.setHorizontalHeaderLabels(headers)        self.tableView = QTableView(self)        # 最后一列拉伸        self.tableView.horizontalHeader().setStretchLastSection(True)        self.tableView.setModel(self.model)        self.layout = QHBoxLayout()        self.layout.addWidget(self.tableView)        self.setLayout(self.layout)    def initUI(self):        # 数据项增加        for row in range(10):            for column in range(4):                item = QStandardItem()                item.setText(str(column))                self.model.setItem(row, column, item)        # 增加一行        for row in range(5):            items = []            for column in range(4):                items.append(QStandardItem(str(column)))            self.model.appendRow(items)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

二、QTreeView

1、QTreeView简介

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

2、QTreeView实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QTreeView, QHBoxLayoutfrom PyQt5.QtGui import QStandardItemModel,QStandardItemclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.model = QStandardItemModel()        self.treeView = QTreeView(self)        self.treeView.setModel(self.model)        self.layout = QHBoxLayout()        self.layout.addWidget(self.treeView)        self.setLayout(self.layout)    def initUI(self):        root = self.model.invisibleRootItem()        for i in range(4):            item = QStandardItem(str(i))            for j in range(3):                chidItem = QStandardItem(str(j))                item.setChild(j, chidItem)            root.setChild(i, item)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

三、QListView

1、QListView简介

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

2、QListView实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QListView, QHBoxLayoutfrom PyQt5.QtGui import QStandardItemModel,QStandardItemclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.model = QStandardItemModel()        self.listView = QListView(self)        self.listView.setModel(self.model)        self.layout = QHBoxLayout()        self.layout.addWidget(self.listView)        self.setLayout(self.layout)    def initUI(self):        root = self.model.invisibleRootItem()        for i in range(10):            item = QStandardItem(str(i))            root.setChild(i, item)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

四、QTableWidget

1、QTableWidget简介

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

2、QTableWidget实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTableWidget, QTableWidgetItemfrom PyQt5.QtCore import Qtclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.tableWidget = QTableWidget(self)        self.layout = QHBoxLayout()        self.layout.addWidget(self.tableWidget)        self.setLayout(self.layout)    def initUI(self):        self.tableWidget.setRowCount(10)        self.tableWidget.setColumnCount(5)        for row in range(10):            for column in range(5):                item = QTableWidgetItem()                # 设置数据项显示数据角色的数据                item.setData(Qt.DisplayRole, column)                self.tableWidget.setItem(row, column, item)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

五、QTreeWidget

1、QTreeWidget简介

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

2、QTreeWidget实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItemfrom PyQt5.QtCore import Qtclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.treeWidget = QTreeWidget(self)        self.layout = QHBoxLayout()        self.layout.addWidget(self.treeWidget)        self.setLayout(self.layout)    def initUI(self):        root = self.treeWidget.invisibleRootItem()        for row in range(4):            item = QTreeWidgetItem()            item.setData(0, Qt.DisplayRole, row)            root.addChild(item)            # 设置数据项显示数据角色的数据            root.addChild(item)            for column in range(3):                child = QTreeWidgetItem()                child.setData(0, Qt.DisplayRole, column)                item.addChild(child)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

六、QListWidget

1、QListWidget简介

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

2、QListWidget实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QListWidget, QListWidgetItemfrom PyQt5.QtCore import Qtclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.listWidget = QListWidget(self)        self.layout = QHBoxLayout()        self.layout.addWidget(self.listWidget)        self.setLayout(self.layout)    def initUI(self):        for i in range(10):            item = QListWidgetItem()            # 设置数据项显示数据角色的数据            item.setData(Qt.DisplayRole, i)            self.listWidget.addItem(item)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

七、QStackedWidget

1、QStackedWidget简介

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

2、QStackedWidget实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QStackedWidget, QPushButtonclass MainWidget(QWidget):    currentIndex = 0    N = 5    def __init__(self, parent=None):        super().__init__(parent)        self.stackWidget = QStackedWidget(self)        self.layout = QVBoxLayout()        button = QPushButton("Next")        button.clicked.connect(self.onNext)        self.layout.addWidget(self.stackWidget)        self.layout.addWidget(button)        self.setLayout(self.layout)    def initUI(self):        for i in range(self.N):            button = QPushButton()            button.setText("Button {0}".format(i))            self.stackWidget.addWidget(button)    def onNext(self):        self.currentIndex = self.currentIndex + 1        self.currentIndex = self.currentIndex % self.N        self.stackWidget.setCurrentIndex(self.currentIndex)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.initUI()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

八、QDockWidget

1、QDockWidget简介

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

2、QDockWidget实例

import sysfrom PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEditfrom PyQt5.QtCore import Qtclass MainWindow(QMainWindow):    def __init__(self, parent=None):        super().__init__(parent)        # central widget        self.centralWidget = QTextEdit()        self.centralWidget.setText("Main Window")        self.centralWidget.setAlignment(Qt.AlignCenter)        self.setCentralWidget(self.centralWidget)        # left dock        dock = QDockWidget("Window1", self)        dock.setFeatures(QDockWidget.DockWidgetMovable)        dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)        textEdit = QTextEdit()        textEdit.setText("Window1,The dock widget can be moved between docks and users")        dock.setWidget(textEdit)        self.addDockWidget(Qt.LeftDockWidgetArea, dock)        # right dock        dock =QDockWidget("Window2", self)        dock.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetFloatable)        textEdit =QTextEdit()        textEdit.setText("Window2,The dock widget can be detac from the main window,""and float as an independent window,and can be closed")        dock.setWidget(textEdit)        self.addDockWidget(Qt.RightDockWidgetArea, dock)        # right dock        dock =QDockWidget("Window3", self)        dock.setFeatures(QDockWidget.AllDockWidgetFeatures)        textEdit = QTextEdit()        textEdit.setText("Window3,The dock widget can be closed,moved,and float")        dock.setWidget(textEdit)        self.addDockWidget(Qt.RightDockWidgetArea, dock)        self.setWindowTitle("DockWidget Demo")        self.show()if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWindow()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

九、QMidArea

1、QMidArea简介

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

2、QMidArea实例

import sysfrom PyQt5.QtWidgets import QApplication, QMdiArea, QMdiSubWindowclass MainWindow(QMdiArea):    def __init__(self, parent=None):        super().__init__(parent)        self.addSubWindow(QMdiSubWindow())        self.addSubWindow(QMdiSubWindow())        self.show()if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWindow()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())

十、QScrollArea

1、QScrollArea简介

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

2、QScrollArea实例

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QPushButton, QTableViewclass MainWidget(QWidget):    def __init__(self, parent=None):        super().__init__(parent)        self.layout = QVBoxLayout()        # 滚动区创建        self.scrollArea = QScrollArea()        # 容器组件        widget  = QWidget()        layout = QVBoxLayout()        tableView = QTableView()        button = QPushButton("OK")        layout.addWidget(tableView)        layout.addWidget(button)        widget.setLayout(layout)        # 设置滚动区的容器组件        self.scrollArea.setWidget(widget)        self.layout.addWidget(self.scrollArea)        self.setLayout(self.layout)if __name__ == "__main__":    app = QApplication(sys.argv)    window = MainWidget()    window.resize(400, 200)    window.show()    sys.exit(app.exec_())
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
实战PyQt5: 113-QSS 定制窗口的标题栏
Python和PyQt:构建GUI桌面计算器
实战PyQt5:112
【第二节】PyQt5基本功能
PyQt4 信号和槽详解
Python快速入门系列:PyQt5 快速开发GUI-窗口类型以及主窗口创建
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服