PyQt5高级窗口组件
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高级窗口组件的更多相关文章
- 重磅推出TabLayout高级窗口组件
TabLayout是在APICloud现有窗口系统基础上升级而来的高级窗口组件,符合Material Design规范,可通过简单的配置为窗口实现原生的导航栏和TabBar,它将帮助您节省30%以上的 ...
- 2.PyQt5【窗口组件】对话框-Dialog
一.前言 QDialog 类是对话框窗口的基类.对话框窗口是主要用于短期任务以及和用户进行简要 通讯的顶级窗口.QDialog 可以是模态对话框也可以是非模态对话框.QDialog 支持扩展性并 且可 ...
- PyQt5中QTableView函数讲解
如果想熟悉QTableWidget,请参考PyQt5高级界面控件之QTableWidget(四) setSpan(int, int, int, int)四个参数分别代表,起始行,列,合并的行数,全并的 ...
- vnpy源码阅读学习(3):学习vnpy的界面的实现
学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...
- vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架
自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...
- lhgDialog窗口组件
应用到你的项目 在页面head引入lhgdialog(如果项目采用jQuery作为框架,则引用jQuery的库). <script type="text/javascript" ...
- Python + PyQt5 实现美剧爬虫可视工具
美剧<权力的游戏>终于要开播最后一季了,作为马丁老爷子的忠实粉丝,为了能够看得懂第八季复杂庞大的剧情架构,本人想着将前几季再稳固一下,所以就上美剧天堂下载来看,可是每次都上去下载太麻烦了, ...
- pyqt5 -——基本功能(HelloWorld)
一. 简单窗口 这个简单的小例子展示的是一个小窗口.但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现.这在很多应用中很常见,没必要每次都要重写这部分代码,Qt ...
- 二、PyQt5基本功能和操作入门
在这里,我将根据自己的学习历程从初级到高级介绍pyqt5.因为是学到哪里就写道哪里,所以内容排版比较随意.有两点问题需要先说明: 1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以 ...
- QT学习之windows下安装配置PyQt5
windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...
随机推荐
- plsql和instantclient版本都对,依然不能初始化oci.dll解决办法
这里写到 "初始化错误,不能初始化 oci.dll, 请确认你安装的是64位的Oracle客户端 " ,这个描述还是非常的到位啊,我一检查,果然下载的客户端是32位的,在确保自己的 ...
- idea var 总是有final
转自:https://blog.csdn.net/Grantr/article/details/119184963 解决idea中快捷键ctrl+alt+v多生成的final ctrl+alt+v快捷 ...
- 手动收集oracle的统计信息脚本及相关操作
我们一般习惯使用oracle自带的统计信息收集,但很多时候我们会发现,有很多关键的表始终没有被收集过. connect 用户/密码grant create any table to 用户;-- 这一步 ...
- ORACLE 查看用户下表占用空间大小
方式一: select * from user_segments s where s.BYTES is not null order by s.BYTES desc 方式二: select s ...
- 【批处理】启动 VMware 服务的简单批处理脚本
早些时候编写的一个启动VMware服务的简单批处理脚本. 主要是记录一下自动提升运行权限的命令,不用再右键"以管理员身份运行". @echo off mode con cols=9 ...
- 【2020NOI.AC省选模拟#7】C. 逃课
题目链接 原题解: 我们需要找出两个距离不超过$k-1$的位置,使他们的和尽量大. 被修改过得位置比较少,所以我们可以先求出连个位置都没有被修改过的答案,然后只关心那些涉及到至少一个被修改过的位置的方 ...
- 添加新模块 import
import getpass username = input("username") password = input("password") #passwo ...
- Excel入门
Excel入门 一.Excel 2019工作界面介绍 文件菜单 选项卡.功能区和组 快速访问工具栏 公式编辑栏(名称框.编辑按钮.编辑栏) 内容编辑区(单元格.行号.列标.水平滚动条.垂直滚动条.工作 ...
- Redis各个客户端的对比
[Spring RedisTemplate 的底层一开始使用Jedis.但是自从SpringBoot2开始,底层开始使用了Lettuce,故不算在内] [题外话:如果要使用Spring来集成对Redi ...
- doy 20 系统优化
系统优化 1.yum源的优化 CentOS base epel 自建yum仓库使用一个较为稳定的仓库wget -O /etc/yum.repos.d/CentOS-Base.repo h ...