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. angular的发布订阅

    import subject from "nxjs/subject"; let sub = new subject(); //发布订阅 sub.subscribe(data=> ...

  2. JS学习- Canvas - 遮盖组合

    Compositing 组合 globalCompositeOperation这个属性设定了在画新图形时采用的遮盖策略,其值是一个标识12种遮盖方式的字符串. 值 描述 图示 source-over ...

  3. 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程-转载

    (24条消息) 根据STM32CubeMX软件创建STM32芯片的Altium Designer原理图库教程_奥比克_阿彦少爷的博客-CSDN博客_stm32原理图库 1所需软件及环境1.STM32C ...

  4. Window下载并安装WinSCP客户端

    winSCP官方网站:https://winscp.net/eng/docs/lang:chs. 环境 操作系统:Window 10 企业版LTSC;内存:8GB;操作类型:64位. 步骤 1. 打开 ...

  5. 061_Apex 异常捕捉

    Trigger 中的错误处理 在 Trigger 中,我们可以为进行操作的数据进行验证,类似于验证规则.如果遇到不符合条件的数据,可以通过 addError() 函数来将错误显示给用户,并记录日志. ...

  6. 个人js基础知识及看js高级程序设计查漏 汇总

    1.事件循环机制 js单线程操作. 1>主线程读取js代码 ,此时为同步环境,形成相应的堆和执行栈. 2>主线程遇到异步任务,指给对应的异步进程处理. 3>异步进程处理完毕后,将相应 ...

  7. Leetcode习题集-链表

    这里记录一些我刷题的思路方便之后进行复习重温,同时也方便进行添加 P141-环形链表 class Solution { public: bool hasCycle(ListNode *head) { ...

  8. Linux ~ jenkins 直接安装

    前置条件: 1. Jenkins是由java编写的,所以最好安装java8以上的环境 开始安装: 1. 配置yum源,将jenkins导入yum源 sudo wget -O /etc/yum.repo ...

  9. Vue3 + echarts 统一封装

    1. 新建 echartsLib.js 文件,统一导入需要的组件 import * as echarts from "echarts/core"; import { SVGRend ...

  10. uniapp 报错 签名不对 请检查签名是否与开放平台上填写的一致

    问题描述 用签名工具 输入包名   获取签名 在微信开放平台申请app 用获取的签名申请 申请成功后  在hbuilderx上云打包apk 分享 报  签名不对  请检查签名是否与开放平台上填写的一致 ...