https://blog.csdn.net/A642960662/article/details/123093350?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-2-123093350-null-null.pc_agg_new_rank&utm_term=pyqt%E6%9E%84%E5%BB%BA%E6%B5%AE%E5%8A%A8%E7%AA%97&spm=1000.2123.3001.4430

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

一、QTableView

1、QTableView简介

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

2、标准模型

QStringListModel 字符串链表数据模型

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

QDirModel 文件系统目录模型

QSqlQueryModel SQL查询结果集数据模型

QSqlTableModel SQL表格数据模型

QSqlRelationTableModel 关系型SQL表格数据模型

QSortFilterProxyModel 排序过滤代理模型

3、QTableView实例

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QTableView, QHBoxLayout

from PyQt5.QtGui import QStandardItemModel,QStandardItem

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QTreeView, QHBoxLayout

from PyQt5.QtGui import QStandardItemModel,QStandardItem

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QListView, QHBoxLayout

from PyQt5.QtGui import QStandardItemModel,QStandardItem

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTableWidget, QTableWidgetItem

from PyQt5.QtCore import Qt

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItem

from PyQt5.QtCore import Qt

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QListWidget, QListWidgetItem

from PyQt5.QtCore import Qt

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QStackedWidget, QPushButton

class 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 sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit

from PyQt5.QtCore import Qt

class 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 sys

from PyQt5.QtWidgets import QApplication, QMdiArea, QMdiSubWindow

class 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 sys

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QPushButton, QTableView

class 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_())

PyQt5高级窗口组件的更多相关文章

  1. 重磅推出TabLayout高级窗口组件

    TabLayout是在APICloud现有窗口系统基础上升级而来的高级窗口组件,符合Material Design规范,可通过简单的配置为窗口实现原生的导航栏和TabBar,它将帮助您节省30%以上的 ...

  2. 2.PyQt5【窗口组件】对话框-Dialog

    一.前言 QDialog 类是对话框窗口的基类.对话框窗口是主要用于短期任务以及和用户进行简要 通讯的顶级窗口.QDialog 可以是模态对话框也可以是非模态对话框.QDialog 支持扩展性并 且可 ...

  3. PyQt5中QTableView函数讲解

    如果想熟悉QTableWidget,请参考PyQt5高级界面控件之QTableWidget(四) setSpan(int, int, int, int)四个参数分别代表,起始行,列,合并的行数,全并的 ...

  4. vnpy源码阅读学习(3):学习vnpy的界面的实现

    学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...

  5. vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架

    自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...

  6. lhgDialog窗口组件

    应用到你的项目 在页面head引入lhgdialog(如果项目采用jQuery作为框架,则引用jQuery的库). <script type="text/javascript" ...

  7. Python + PyQt5 实现美剧爬虫可视工具

    美剧<权力的游戏>终于要开播最后一季了,作为马丁老爷子的忠实粉丝,为了能够看得懂第八季复杂庞大的剧情架构,本人想着将前几季再稳固一下,所以就上美剧天堂下载来看,可是每次都上去下载太麻烦了, ...

  8. pyqt5 -——基本功能(HelloWorld)

    一. 简单窗口 这个简单的小例子展示的是一个小窗口.但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现.这在很多应用中很常见,没必要每次都要重写这部分代码,Qt ...

  9. 二、PyQt5基本功能和操作入门

    在这里,我将根据自己的学习历程从初级到高级介绍pyqt5.因为是学到哪里就写道哪里,所以内容排版比较随意.有两点问题需要先说明: 1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以 ...

  10. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

随机推荐

  1. vscode 部分替换(正则替换)

    1. 数字 \d{n} 2. 数字和字母 [A-Za-z0-9]{n} 常用运算符与表达式 ^ 开始 () 域段 [] 包含,默认是一个字符长度 [^] 不包含,默认是一个字符长度 {n,m} 匹配长 ...

  2. flex布局的相关注意事项

    文献参考地址:https://www.cnblogs.com/qcloud1001/p/9848619.html 重点事项: 弹性容器的属性 作用于交叉轴 align-items :对单行起作用 al ...

  3. (面试题)面试官为啥总是让我们手撕call、apply、bind?

    引言 上一篇关于<面试官为啥总是喜欢问前端路由实现方式>的文章发布后,发现还是挺受欢迎的.这就给我造成了一定的困惑 之前花了很长时间,实现了一个自认为创意还不错的关于前端如何利用node+ ...

  4. IDEA2022 搭建SpringMVC

    https://blog.csdn.net/LiuNengJing/article/details/125888494

  5. shell_Day02

    虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...

  6. vue后台管理系统

    1. 项目概述: 根据不同的应用场景,电商系统一般都提供了 PC 端.移动 APP.移动 Web.微信小程序等多种终端访问方式. 2. 电商后台管理系统的功能 电商后台管理系统用于管理用户账号.商品分 ...

  7. 音速启动 Vstart 5.7 win10手动移除后台设置主页

    Vstart 用了快12年了,用Wireshark跟踪确实会访问广告页面,也会去上传数据.还会悄悄设置主页 ,所以在Win10上老是被干掉 也想着换 CLaunch 确实不喜欢. Rolan 买了一年 ...

  8. Flutter showModalBottomSheet 顶部圆角

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...

  9. centos7.2 64位安装php7.2.12

    1 安装php所需要的扩展 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl ...

  10. linux 文件系统和包管理工具rpm,yum

    文件系统 1.什么是文件系统? 文件系统是一种存储和组织计算机中数据文件的机制或方法,他使得对计算机内的数据的存储.访问和查找变得更容易,简单. 文件系统落到计算机里其实就是一个应用软件 ext2 e ...