PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)
目录
- 专栏导读
- 1、库的介绍
- PyQt6的主要特点包括:
- 使用PyQt6开发应用程序的一般步骤:
- 库的安装
- 2、设计窗口
- 设计列表视图
- 设计输入框控件与按钮
- 设计布局
- listView的简单样式
- 增删查改函数
- 完整代码
- 总结
专栏导读

🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注
👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅
🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅
📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
❤️ 欢迎各位佬关注! ❤️
1、库的介绍
-
PyQt6是一个创建图形用户界面应用程序的工具包,它是Qt6的Python绑定。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。PyQt6使得Python程序员能够利用Qt的强大功能,轻松创建具有丰富功能和美观界面的应用程序。
PyQt6的主要特点包括:
-
跨平台:可以在Windows、Linux、macOS等操作系统上运行。
-
丰富的控件:提供了大量的控件(如按钮、标签、文本框等),方便开发者使用。
-
强大的布局管理:提供了多种布局管理器,可以方便地对控件进行布局。
-
事件处理:支持各种事件处理,如鼠标点击、键盘输入等。
-
丰富的API:提供了大量的API,可以方便地进行各种开发操作。
-
与Qt6的紧密集成:作为Qt6的Python绑定,PyQt6可以访问Qt6的所有功能。
使用PyQt6开发应用程序的一般步骤:
-
安装PyQt6:可以通过pip安装PyQt6。
-
导入必要的模块:从PyQt6.QtWidgets模块中导入应用程序、窗口等类。
-
创建应用程序和窗口:创建一个QApplication对象和一个窗口对象。
-
设置窗口:设置窗口的标题、大小等属性。
-
添加控件:在窗口中添加各种控件,如按钮、文本框等。
-
设置布局:使用布局管理器对控件进行布局。
-
显示窗口:调用窗口的show()方法显示窗口。
-
运行应用程序:调用QApplication对象的exec()方法运行应用程序。
库的安装
pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/
2、设计窗口
调用父类的初始化方法
设置窗口标题
设置窗口的初始大小
# 导入必要的PyQt6模块
import sys
from PyQt6.QtGui import QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication, QHBoxLayout, QListView, QLineEdit
# 定义一个继承自QWidget的类,用于构建我们的GUI
class MyWidget(QWidget): def __init__(self, parent=None): super(MyWidget, self).__init__(parent) # 调用父类的初始化方法 self.setWindowTitle("简易PyQt6-GUI界面实现列表的增删查改") # 设置窗口标题 self.resize(500,350) # 设置窗口的初始大小
设计列表视图
初始化一个列表
创建一个4行1列的标准数据模型,用于管理列表视图的数据
遍历数据模型的行数,将self.list中的数据设置为数据模型的项
创建QListView控件,并设置其模型为上面创建的数据模型
# 初始化一个列表,用于存储将要显示在QListView中的数据
self.list = ['奥运', '巴黎', '夺冠', '奥运健儿'] # 创建一个4行1列的标准数据模型,用于管理列表视图的数据
self.mode = QStandardItemModel(4, 1) # 遍历数据模型的行数,将self.list中的数据设置为数据模型的项
for i in range(self.mode.rowCount()): item = QStandardItem(self.list[i]) self.mode.setItem(i, 0, item) # 向数据模型中再插入一行数据
self.mode.insertRow(4, QStandardItem("大家好")) # 向数据模型中再插入一行数据
self.mode.insertRow(4, QStandardItem("大家好")) # 创建QListView控件,并设置其模型为上面创建的数据模型
self.listView = QListView()
self.listView.setModel(self.mode)
设计输入框控件与按钮
文本输入框:QLineEdit()
按钮绑定函数:QPushButton("显示文字", clicked=self.函数名无括号)
# 创建其他控件:一个文本输入框和一个包含三个按钮的水平布局
self.le = QLineEdit() # 文本输入框,可能用于输入待添加的项目名称
self.addPb = QPushButton("增加项", clicked=self.addItem) # 增加项目的按钮,绑定到addItem方法
self.delPb = QPushButton("删除项", clicked=self.delItem) # 删除项目的按钮,绑定到delItem方法
# 增加一个查
self.searchPb = QPushButton("查询", clicked=self.searchItem)
# 增加一个改
self.changePb = QPushButton("修改", clicked=self.changeItem)
self.sortPb = QPushButton("项目排序", clicked=self.sortItem) # 排序按钮,绑定到sortItem方法
设计布局
# 创建水平布局,并添加按钮
hLayout = QHBoxLayout()
hLayout.setContentsMargins(0, 0, 0, 0)
hLayout.addWidget(self.addPb)
hLayout.addWidget(self.delPb)
hLayout.addWidget(self.searchPb)
hLayout.addWidget(self.changePb)
hLayout.addWidget(self.sortPb)# 创建垂直布局,并设置到当前QWidget上
self.vLayout = QVBoxLayout(self)
self.vLayout.addWidget(self.listView) # 添加列表视图
self.vLayout.addWidget(self.le) # 添加文本输入框
self.vLayout.addLayout(hLayout) # 添加包含按钮的水平布局
listView的简单样式
self.listView.setStyleSheet("""
QListView {
background-color: #FFE4E1;
color: #333333;
border: 1px solid #BBBBBB;
}
QListView::Item {
padding: 5px;
}
QListView::Item:hover {
background-color: #87CEFA;
color:blue;
}""")
增删查改函数
def addItem(self):num = self.mode.rowCount()s = self.le.text()if s != '':self.mode.appendRow(QStandardItem(s))def delItem(self):# 定位当前index = self.listView.currentIndex()if index.isValid():# 删除当前项self.mode.removeRow(index.row())else:self.messageBox = QMessageBox.information(self, "提示", "请选择要删除的内容")def searchItem(self):s = self.le.text()if s != '':for i in range(self.mode.rowCount()):if s == self.mode.item(i, 0).text():# 定位到 当前self.listView.setCurrentIndex(self.mode.index(i, 0))returnelse:# 弹窗提示self.messageBox = QMessageBox.information(self, "提示", "没有找到")def changeItem(self):s = self.le.text()# 获取当前定位index = self.listView.currentIndex()if s != '':if index.isValid():# 获取当前项item = self.mode.itemFromIndex(index)# 获取当前项的文本text = item.text()item.setText(s)self.messageBox = QMessageBox.information(self, "提示", "修改成功!")else:self.messageBox = QMessageBox.information(self, "提示", "请选择要修改的内容")def sortItem(self):self.mode.sort(0)
完整代码
# -*- coding: UTF-8 -*-
'''
@Project :测试
@File :pyqt6_test.py
@IDE :PyCharm
@Author :一晌小贪欢
@Date :2024/7/29 14:35
'''import sys
from PyQt6.QtGui import QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication, QHBoxLayout, QListView, QLineEdit, \QMessageBoxclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("简易PyQt6-GUI界面实现列表的增删查改")self.resize(500, 350)self.list = ['奥运', '巴黎', '夺冠', '奥运健儿']# 创建四行一列标准数据模型self.mode = QStandardItemModel(4, 1)# 将数据中的列表项作为标准数据模型输出for i in range(self.mode.rowCount()):item = QStandardItem(self.list[i])self.mode.setItem(i, 0, item)self.mode.insertRow(4, QStandardItem("大家好"))self.listView = QListView()self.listView.setModel(self.mode)self.le = QLineEdit()self.addPb = QPushButton("增加项", clicked=self.addItem)self.delPb = QPushButton("删除项", clicked=self.delItem)# 增加一个查self.searchPb = QPushButton("查询", clicked=self.searchItem)# 增加一个改self.changePb = QPushButton("修改", clicked=self.changeItem)self.sortPb = QPushButton("项目排序", clicked=self.sortItem)hLayout = QHBoxLayout()hLayout.setContentsMargins(0, 0, 0, 0)hLayout.addWidget(self.addPb)hLayout.addWidget(self.delPb)hLayout.addWidget(self.searchPb)hLayout.addWidget(self.changePb)hLayout.addWidget(self.sortPb)self.vLayout = QVBoxLayout(self)self.vLayout.addWidget(self.listView)self.vLayout.addWidget(self.le)self.vLayout.addLayout(hLayout)# 添加样式self.listView.setStyleSheet("""QListView {background-color: #FFE4E1;color: #333333;border: 1px solid #BBBBBB;}QListView::Item {padding: 5px;}QListView::Item:hover {background-color: #87CEFA;color:blue;}""")def addItem(self):num = self.mode.rowCount()s = self.le.text()if s != '':self.mode.appendRow(QStandardItem(s))def delItem(self):# 定位当前index = self.listView.currentIndex()if index.isValid():# 删除当前项self.mode.removeRow(index.row())else:self.messageBox = QMessageBox.information(self, "提示", "请选择要删除的内容")def searchItem(self):s = self.le.text()if s != '':for i in range(self.mode.rowCount()):if s == self.mode.item(i, 0).text():# 定位到 当前self.listView.setCurrentIndex(self.mode.index(i, 0))returnelse:# 弹窗提示self.messageBox = QMessageBox.information(self, "提示", "没有找到")def changeItem(self):s = self.le.text()# 获取当前定位index = self.listView.currentIndex()if s != '':if index.isValid():# 获取当前项item = self.mode.itemFromIndex(index)# 获取当前项的文本text = item.text()item.setText(s)self.messageBox = QMessageBox.information(self, "提示", "修改成功!")else:self.messageBox = QMessageBox.information(self, "提示", "请选择要修改的内容")def sortItem(self):self.mode.sort(0)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())
总结
-
希望对初学者有帮助
-
致力于办公自动化的小小程序员一枚
-
希望能得到大家的【一个免费关注】!感谢
-
求个 🤞 关注 🤞
-
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
-
求个 ❤️ 喜欢 ❤️
-
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
-
求个 👍 收藏 👍
-
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
相关文章:
PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)
目录 专栏导读1、库的介绍PyQt6的主要特点包括:使用PyQt6开发应用程序的一般步骤:库的安装 2、设计窗口设计列表视图设计输入框控件与按钮设计布局listView的简单样式增删查改函数 完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—P…...
JavaScript快速入门指南
JavaScript是一种广泛应用于网页开发的脚本语言,它可以让网页实现动态效果和交互性。无论是前端开发还是全栈开发,JavaScript都是不可或缺的一部分。本文将带你快速入门JavaScript,从基础语法到实际应用,让你快速上手这门强大的语…...
Esbuild介绍
Esbuild是一个由Evan Wallace基于Go语言开发的快速、可扩展的JavaScript和CSS打包器及压缩器。它以其极快的构建速度和高效的性能在众多构建工具中脱颖而出。 一、核心特性 超快的构建速度: Esbuild相比传统的构建工具(如Webpack)在构建速度…...
UnityShaderUI编辑器扩展
前言: 当我们在制作通用Shader的时候,避免不了许多参数混杂在一起,尽管在材质面板已经使用过Header标签来区分,但是较长的Shader参数就会导致冗余,功能块不够简约明了,如图: 对于Shader制作者来…...
分布式事务——2PC 代码示例
一 2PC代码示例 在Java中实现两阶段提交(2PC, Two-Phase Commit)协议通常涉及多个组件,包括事务协调者(Transaction Coordinator)和多个资源管理器(Resource Managers,如数据库)。在…...
vue实现简易的全局加载动画效果
效果展示 思路 封装一个组件,放Img,伪类样式,固定在屏幕fixed 然后App应用这个组件,Z index拉最大,防止用户在加载动画时乱点, v-show绑定loading,该数据可以放vuex还是任一的公共状态管理变…...
Linux网络工具“瑞士军刀“集合
一、背景 平常我们在进行Linux服务器相关运维的时候,总会遇到一些网络相关的问题。我们可以借助这些小巧、功能强悍的工具帮助我们排查问题、解决问题。 下面结合之前的一些使用经验为大家介绍一下一些经典应用场景下,这个网络命令工具如何使用的。例如怎…...
Sentinel隔离、降级、授权规则详解
文章目录 Feign整合Sentinel线程隔离熔断降级授权规则自定义异常结果 上一期教程讲解了 Sentinel 的限流规则: Sentinel限流规则,这一期主要讲述 Sentinel 的 隔离、降级和授权规则 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还…...
C++11 列表初始化与类型声明
目录 0.前言 1.C11介绍 2.统一的列表初始化 2.1{}初始化 2.2initializer_list 2.2.1initializer_list 的基本用法 2.2.2用于类的 initializer_list 构造函数 2.2.3与标准库容器的结合 2.2.4优势与注意事项 3.新声明 3.1auto 3.1.1基本用法 3.1.2优势 3.1.3注意事项 3.2declt…...
缓存策略自定义:Laravel应用性能优化秘籍
缓存策略自定义:Laravel应用性能优化秘籍 在现代Web应用中,缓存是一种提高应用性能和响应速度的有效手段。Laravel框架提供了强大的缓存机制,支持多种缓存驱动,如文件、数据库、Redis等。然而,在某些情况下࿰…...
python连接sqlserver,封装操作
1封装 # 导入Flask类 import pymssql import tracebackclass Mssql(object):# 连接库def base(database):connect pymssql.connect(usersa,password123456,databasef{database},charsetutf8,as_dictTrue)if connect:print("数据库连接成功!")else:print…...
原生PHP/JS自主开发的交友内核框架婚恋交友系统V10
本文来自:婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架,极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒:脱单盲盒类似于漂流瓶,先将自己《投放》到盲盒中,另一伴有缘将您取…...
如何在Java、Python、GO程序中使用AI人脸识别API接口
AI人脸识别是一种通过面部识别或确认一个人身份的软件。它通过识别和测量图像中的面部特征来工作。面部识别可以识别图像或视频中的人脸,确定两幅图像中的人脸是否属于同一个人,或者在大量现有图像中搜索人脸。 AI人脸识别的优势是什么? 高…...
在vue使用MQTT
在vue中使用MQTT 最近有个需求,需要前端直接链接mqtt,想到后面可能多出使用,就封装成了hooks 中间遇到了一个坑,就是浏览器默认不支持mqtt协议,其借助了webSocket实现的mqtt协议, 而mqtt默认未开启webSocke…...
DNS、网关、IP、DHCP
DNS、网关、IP、DHCP:深入剖析与理解 在计算机网络的世界中,DNS、网关、IP和DHCP是四个至关重要的概念,它们共同构建了互联网的基础架构,确保了数据的准确传输和设备的有效连接。本文将深入剖析这四个概念,帮助读者更…...
vue2 vue3 props 的处理机制
在 Vue 2 中,props 是单向数据流,父组件向子组件传递的 props 默认情况下是不具有响应式特性的。这意味着当父组件的数据发生变化时,如果传递给子组件的 props 发生变化,子组件不会自动更新视图。 具体来说,在 Vue 2 …...
C++第十弹 ---- vector的介绍及使用
目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…...
ValueError: invalid literal for int() with base 10: ‘a‘
ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰ÿ…...
[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象
💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...
搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表
我在上交所没发现上交所有像深交所一样的一键下载股票xls文档的按钮,因此上交所的股票列表读取就会比较麻烦。总体思路是查出来所有股票的代码之后根据股票代码逐一发起HTTP请求读取公司英文名、总股本、流通股本等详细信息,这就导致上交所爬虫的网络交互…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
