PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)

专栏导读

请添加图片描述

  • 🌸 欢迎来到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))
                return
        else:
            # 弹窗提示
            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, \
    QMessageBox


class 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))
                    return
            else:
                # 弹窗提示
                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基础学习专栏

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一晌小贪欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值