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. plsql和instantclient版本都对,依然不能初始化oci.dll解决办法

    这里写到 "初始化错误,不能初始化 oci.dll, 请确认你安装的是64位的Oracle客户端 " ,这个描述还是非常的到位啊,我一检查,果然下载的客户端是32位的,在确保自己的 ...

  2. idea var 总是有final

    转自:https://blog.csdn.net/Grantr/article/details/119184963 解决idea中快捷键ctrl+alt+v多生成的final ctrl+alt+v快捷 ...

  3. 手动收集oracle的统计信息脚本及相关操作

    我们一般习惯使用oracle自带的统计信息收集,但很多时候我们会发现,有很多关键的表始终没有被收集过. connect 用户/密码grant create any table to 用户;-- 这一步 ...

  4. ORACLE 查看用户下表占用空间大小

    方式一: select  * from user_segments s  where s.BYTES  is not null  order by s.BYTES desc 方式二: select s ...

  5. 【批处理】启动 VMware 服务的简单批处理脚本

    早些时候编写的一个启动VMware服务的简单批处理脚本. 主要是记录一下自动提升运行权限的命令,不用再右键"以管理员身份运行". @echo off mode con cols=9 ...

  6. 【2020NOI.AC省选模拟#7】C. 逃课

    题目链接 原题解: 我们需要找出两个距离不超过$k-1$的位置,使他们的和尽量大. 被修改过得位置比较少,所以我们可以先求出连个位置都没有被修改过的答案,然后只关心那些涉及到至少一个被修改过的位置的方 ...

  7. 添加新模块 import

    import getpass username = input("username") password = input("password") #passwo ...

  8. Excel入门

    Excel入门 一.Excel 2019工作界面介绍 文件菜单 选项卡.功能区和组 快速访问工具栏 公式编辑栏(名称框.编辑按钮.编辑栏) 内容编辑区(单元格.行号.列标.水平滚动条.垂直滚动条.工作 ...

  9. Redis各个客户端的对比

    [Spring RedisTemplate 的底层一开始使用Jedis.但是自从SpringBoot2开始,底层开始使用了Lettuce,故不算在内] [题外话:如果要使用Spring来集成对Redi ...

  10. doy 20 系统优化

    系统优化 1.yum源的优化 CentOS   base   epel ​自建yum仓库​使用一个较为稳定的仓库​wget -O /etc/yum.repos.d/CentOS-Base.repo h ...