【Python第三方库】PyQt5安装与应用

news2024/11/15 12:49:48

在这里插入图片描述

文章目录

  • 引言
  • 安装PYQT5
  • 基于Pyqt5的简单桌面应用
  • 常用的方法与属性
  • QtDesigner工具使用与集成
  • 窗口类型
    • QWidget和QMainWindow区别
  • UI文件加载方式
    • 直接加载UI文件的方式显示窗口
    • 转化py文件进行显示窗口
  • PyQt5中常用的操作
    • 信号与槽的设置绑定
    • 页面跳转

引言

PyQt5是一个流行的Python库,用于创建桌面应用程序。它提供了对Qt应用程序框架的访问,使得开发者可以利用Qt的强大功能来构建跨平台的应用程序。

安装PYQT5

  1. 首先,你需要确保你的计算机上已经安装了Python。可以通过在命令行中输入以下命令来验证Python是否已安装:

    python --version
    
  2. 安装PyQt5,打开命令行工具,使用pip命令安装PyQt5

    pip install pyqt5
    

    注意:如果你在安装过程中遇到网络问题,导致下载失败,可以使用国内第三方镜像网站,作为请求服务器。这里推荐的是清华大学的TUNA镜像站。

    pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  3. 此时Pyqt5已经安装完成,因为本篇博客需要用到Qt Designer工具,为了使用PyQt5的Qt Designer工具,需要安装PyQt5的工具包。可以使用以下命令:

    pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    Qt Designer 是一个图形用户界面(GUI)设计工具,它允许开发者通过拖放组件的方式来设计应用程序的用户界面,而不需要编写大量的代码。

  4. 安装完成后,可以通过以下命令查看是否安装成功:

    pip list
    

在这里插入图片描述
注意:以上安装方式建议在Python的虚拟环境下进行。

基于Pyqt5的简单桌面应用

开发一个Pyqt5的桌面应用必须要包含两个类:

  1. QApplication(可执行程序):它负责管理整个应用程序的控制流程,包括事件循环和应用程序的生命周期。每个PyQt5应用程序都必须创建一个 QApplication 对象,它通常在应用程序的 main 函数中初始化。
  2. QWidget(窗口):是所有控件的基类,代表一个窗口或窗口内部的一个控件。你可以使用 QWidget 来创建自定义窗口或对话框。

这两个类都在PyQt5.QtWidgets模块下。

import sys
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    # 创建QApplication类的实例
    app = QApplication(sys.argv)
    # 创建一个窗口
    window = QWidget()
    # 设置窗口的尺寸
    window.resize(500, 500)
    # 设置窗口的标题
    window.setWindowTitle("Hello World")
    # 显示窗口
    window.show()
    # 进入程序的主循环
    sys.exit(app.exec_())

在 PyQt5 应用程序中,sys.exit(app.exec_()) 是一个常见的代码模式,它用于启动应用程序的事件循环,并在事件循环结束时正确退出应用程序(相当于监测)。app 是 QApplication 类的一个实例,它负责管理整个应用程序的生命周期。exec_() 是 QApplication 的一个方法,它的作用是启动应用程序的事件循环。这个方法会阻塞当前线程,直到应用程序接收到退出信号或调用 QApplication.quit()

常用的方法与属性

QWidget 是 PyQt5 中所有控件和窗口的基类。它提供了丰富的方法和属性,使得开发者可以灵活地定制窗口的外观和行为。

  • resize(width, height):设置窗口的尺寸。
  • setMinimumSize(width, height):设置窗口的最小尺寸。
  • setMaximumSize(width, height):设置窗口的最大尺寸。
  • setFixedSize(width, height):将窗口尺寸固定为指定值,不允许用户调整。
  • setWindowTitle(title):设置窗口的标题。
  • setStyleSheet(styleSheet):应用 CSS 样式到窗口,可以改变窗口的背景颜色、字体等。
  • setWindowIcon(icon):设置窗口的图标。
  • show():显示窗口。
  • hide():隐藏窗口。
  • close():关闭窗口,并触发 closeEvent。

QtDesigner工具使用与集成

Qt Designer 是一个功能强大的图形用户界面(GUI)设计工具,它是 Qt 框架的一部分,并与 PyQt5 紧密集成。通过 Qt Designer,开发者可以可视化地设计应用程序的用户界面,而无需编写大量的代码。此工具包含在第三方包pyqt5-tools下,执行安装(install)之后,该工具会自动生成在对应安装的Python环境中:Lib → \rightarrow site-packages → \rightarrow qt5_applications → \rightarrow Qt → \rightarrow bin目录下的designer.exe可执行文件,双击运行即可。

选择一个窗口,创建即可,之后选择自己需要的控件进行拼装即可,这里不对简单步骤进行过多讲解。
在这里插入图片描述
使用PyCharm集成QtDesigner工具,点击PyCharm的设置(Settings),Tools下的外部工具(External Tools),进行添加即可。
在这里插入图片描述

窗口类型

在PyQt5中,常见的窗口类型主要有三种:QMainWindow、QWidget和QDialog。每种窗口类型都有其特定的用途和特点。

  1. QMainWindow:QMainWindow是最常见的主窗口类型,适用于需要包含菜单栏、工具栏、状态栏和标题栏的应用程序。它提供了一个标准的主窗口布局,可以方便地添加各种控件和功能。(可以包含菜单栏、工具栏、状态栏和标题栏。)
  2. QWidget:QWidget是一个通用的窗口基类,可以用作顶层窗口或嵌入到其他窗口中。它是所有用户界面对象的基类,适用于不需要菜单栏、工具栏和状态栏的简单窗口。
  3. QDialog:QDialog是对话框窗口的基类,通常用于执行短期任务或与用户进行交互。对话框可以是模态的(阻塞其他窗口的输入)或非模态的(不阻塞其他窗口的输入)。

QWidget和QMainWindow区别

QWidget 和 QMainWindow 都是 PyQt5 中重要的窗口类,它们在构建 GUI 应用程序时扮演着基础的角色。理解它们之间的关系和区别对于设计有效的用户界面至关重要。

QWidget

  • QWidget 是所有控件的基类,提供了通用的容器功能。
  • 它可以用来创建各种控件和组件,如按钮、文本框、标签等。
  • QWidget 可以作为窗口使用,但它不具备窗口的装饰(如标题栏、边框等)。
  • 通常用作其他控件的容器,或作为自定义控件的基类。

QMainWindow

  • QMainWindow 是 QWidget 的子类,专门用于创建应用程序的主窗口。
  • 它提供了窗口装饰和高级窗口功能,如菜单栏、工具栏、状态栏和中央部件(central widget)。
  • QMainWindow 支持多文档界面(MDI),允许在主窗口内部打开多个子窗口。
  • 它通常作为应用程序的主窗口,可以包含多个 QWidget 或其他控件。

QMainWindow 继承自 QWidget,这意味着 QMainWindow 拥有 QWidget 的所有属性和方法。

UI文件加载方式

直接加载UI文件的方式显示窗口

在 PyQt5 中,uic(用户界面编译器)模块是一个强大的工具,它允许开发者将 Qt Designer 设计的 .ui 文件加载到 Python 应用程序中。这为快速开发 GUI 应用程序提供了极大的便利。uic.loadUi 函数可以动态加载 .ui 文件,无需将 .ui 文件转换为 Python 代码。确保 .ui 文件的路径是正确的,如果路径错误,uic.loadUi 将无法找到文件。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5 import uic

# 假设你的.ui文件已经按照Python文件的方式生成,并且命名为'my_design.ui'
ui_filename = './ui/untitled1.ui'

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # 加载.ui文件
        uic.loadUi(ui_filename, self)

if __name__ == '__main__':
    # 创建QApplication类的实例
    app = QApplication(sys.argv)
    # 创建一个窗口
    window = MainWindow()
    # 设置窗口的标题
    window.setWindowTitle("Hello World")
    # 显示窗口
    window.show()
    # 进入程序的主循环
    sys.exit(app.exec_())

因为这里在使用工具的时候,选择的是MainWindow窗口,所以对应的MainWindow类集成QMainWindow。ui文件存放在当前项目的ui文件夹下。

转化py文件进行显示窗口

使用命令,将ui文件转化为py文件,python -m PyQt5.uic.pyuic 是转换 .ui 文件的主要命令,其基本格式如下:

python -m PyQt5.uic.pyuic input.ui -o output.py

其中:

  • input.ui 是 Qt Designer 生成的 .ui 文件。
  • output.py 是转换后的 Python 代码文件。

参数说明

  • -o:指定输出文件的路径名称。
  • -x:如果指定,转换器会执行 UI 文件并生成可执行的 Python 代码。
  • -from-imports:允许转换器从导入的模块中读取 UI 文件。

或者可以使用pyuic命令进行ui文件转换,pyuic5 是 PyQt5 提供的一个命令行工具,用于将 .ui 文件转换为 Python 代码。这个工具是 uic 模块的一部分,可以通过命令行直接调用。基本的命令格式如下:

pyuic5 input.ui -o output.py

常用选项

  • -x 或 --execute:执行生成的 Python 代码,生成的代码将是一个可执行的脚本,而不仅仅是一个类定义。
  • -o 或 --output:指定输出文件的路径名称。

之后,导入自定义 UI 类,将生成的py文件导入到主py里面,例如:

from pyui.pyui1 import Ui_MainWindow

进行设置用户界面,创建 Ui_MainWindow 的实例,并调用它的 setupUi 方法,将 Qt Designer 中的设计应用到 window 实例上。

ui = Ui_MainWindow()
ui.setupUi(window)

注意:其中实例化window窗口的类,要和QtDesigner工具选择的窗口一样、

代码展示

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from pyui.pyui1 import Ui_MainWindow

if __name__ == '__main__':
    # 创建QApplication类的实例
    app = QApplication(sys.argv)
    # 创建一个窗口
    window = QMainWindow()
    # 将py文件添加到窗口
    ui = Ui_MainWindow()
    ui.setupUi(window)
    # 显示窗口
    window.show()

    # 进入程序的主循环
    sys.exit(app.exec_())

PyQt5中常用的操作

信号与槽的设置绑定

在PyQt5中,信号与槽(signals and slots)机制是实现控件间交互的核心机制。信号是当某个事件发生时由控件发出的,而槽是一个可以响应信号的函数。

基本概念

  1. 信号:信号是由控件在特定事件发生时发出的。例如,按钮被点击、文本框内容改变等。
  2. 槽函数:槽函数是响应信号的函数,可以是任何可调用的对象,包括普通函数、类的方法等

要连接一个信号到一个槽函数,可以使用QObject的connect方法。以下是一个简单的例子,展示了如何连接QPushButton的clicked信号到一个槽函数:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

def on_any_button_clicked():
    print("任意按钮被点击了!")

app = QApplication([])
window = QWidget()

button1 = QPushButton("按钮1", window)
button2 = QPushButton("按钮2", window)

button1.clicked.connect(on_any_button_clicked)
button2.clicked.connect(on_any_button_clicked)

window.show()
app.exec_()

一个信号也可以连接到多个槽函数,当信号被触发时,所有连接的槽函数都会被依次调用。此外还可以通过QtDesigner工具进行信号与槽的设置。下列例子是通过控制复选框,进行输入框的显示与隐藏。
在这里插入图片描述

页面跳转

在开发桌面应用程序时,页面跳转是一个常见的需求。无论是从登录页面跳转到主页面,还是从一个功能页面跳转到另一个功能页面,理解和掌握页面跳转的思路和流程是至关重要的。核心思路是创建和管理多个窗口实例。

  1. 初始化当前页面:在程序启动时,首先初始化当前页面的UI组件和布局。设置好页面的各个控件,并连接触发跳转事件的控件(例如按钮)的点击事件到相应的处理函数。
  2. 处理跳转事件:当用户点击触发跳转的控件时,程序会调用预先定义的处理函数。在这个函数中,首先调用当前页面窗口的close()方法,关闭当前页面窗口。
  3. 创建新页面窗口:在关闭当前页面窗口后,程序会创建新页面窗口的实例。新页面窗口的UI组件和布局在其构造函数中进行初始化。
  4. 显示新页面窗口:创建新页面窗口实例后,调用其show()方法,将新页面窗口显示给用户。此时,用户可以在新页面中进行操作。

在PyQt5中,可以通过调用一个控件的window()方法来获取包含该控件的顶层窗口对象。这对于在页面跳转或其他需要访问当前窗口的场景中非常有用。顶层窗口对象指的是应用程序中最外层的窗口,它通常是QMainWindow或QDialog的实例。顶层窗口是用户直接与之交互的窗口,它包含了所有的子控件和布局。

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("主窗口")
        self.resize(400, 300)

        self.centralwidget = QWidget(self)
        self.setCentralWidget(self.centralwidget)

        layout = QVBoxLayout()
        self.centralwidget.setLayout(layout)

        self.button = QPushButton("点击我", self.centralwidget)
        layout.addWidget(self.button)

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在这个示例中,MainWindow是一个顶层窗口对象,它继承自QMainWindow。我们在MainWindow中添加了一个按钮作为子控件。用户可以直接与这个顶层窗口进行交互。可以直接在对应的事件响应函数使用:self.centralwidget.window().close()进行关闭当前窗口。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java——多线程(2/9):线程创建方式三Callable,Thread的常用方法(如何创建、代码实例、API及优缺点)

目录 方式三:实现Callable接口 前言 如何创建 代码实例 API及优缺点 Thread的常用方法 代码演示 方式三:实现Callable接口 前言 前两种线程创建方式都存在的一个问题 假如线程执行完毕后有一些数据需要返回,他们重写的run方法均不能…

算法与算法分析

目录 一.前言 二.算法的特性和要求 三.分析算法--时间效率 四. 分析算法--空间效率 一.前言 算法就是对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中,每个指令表示一个或多个操作。总而言之,我们数据结构就是通过算法实现操…

如何根据员工的反馈来确定六西格玛培训需求?

在六西格玛的推广与实施过程中,最大的挑战往往不在于技术本身,而在于如何让每一位员工都能理解、接受并积极参与其中。员工是企业最直接的执行者,他们的声音直接反映了项目落地的难易程度及潜在障碍。因此,倾听并有效整合员工反馈…

Python Django功能强大的扩展库之channels使用详解

概要 随着实时 web 应用程序的兴起,传统的同步 web 框架已经无法满足高并发和实时通信的需求。Django Channels 是 Django 的一个扩展,旨在将 Django 从一个同步 HTTP 框架转变为一个支持 WebSockets、HTTP2 和其他协议的异步框架。它不仅能够处理传统的 HTTP 请求,还可以处…

STM32串口(串口基础)

串口整个东西可以说但凡你要碰单片机,想做点上点档次的东西的话那你就包用它的。32的串口配置并不难,哪怕是比起51其实也难不到哪去。 目录 一.通信基础 1.通信方式 2.通信速率 二.串口基础 1.串口的数据帧结构(协议) 2.ST…

【轨物方案】开关柜在线监测物联网解决方案

随着物联网技术的发展,电力设备状态监测技术也得到了迅速发展。传统的电力成套开关柜设备状态监测方法主要采用人工巡检和定期维护的方式,这种方法不仅效率低下,而且难以保证设备的实时性和安全性。因此,基于物联网技术的成套开关…

JDBC标准实现

JDBC是什么 Java Database Connectivity:Java访问数据库的解 决方案 JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库,让具体 的…

Nacos 2.x 新增 grpc 端口,Nginx 需要配置TCP端口转发的注意事项

Nacos 2.x 开始,最大的变化就是端口。在默认主端口 8848 之外又新增了三个端口,新增端口是在配置的主端口 server.port 的基础上,进行一定偏移量自动生成。 8848(主端口,默认8848)web页面端口及相关http接口…

医院等保解决方案有哪些?用哪些软件可以加强等级保护?

在医疗领域,信息系统的安全直接关系到患者的隐私保护、医院的正常运营乃至社会的稳定。医院信息系统面临着越来越多的安全挑战。 为了确保患者信息的安全与隐私保护,医院需要采取有效的等保(等级保护)措施。那么,医院…

数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。

您正在摆弄 Android 设备。突然,您意外删除了一张或多张图片。不用担心,您总能找到一款价格实惠的数据恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的数据。 Android 上数据被删除的主要原因 在…

以FastGPT为例提升Rag知识库应用中的检索召回命中率

提升Rag知识库应用中的检索召回命中率 在构建Rag(Retrieval-Augmented Generation)知识库应用时,检索召回知识片段的命中率是至关重要的。高效、准确的检索机制是确保AI系统能够精准响应用户查询的基础。当前,FastGPT主要采用三种…

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显,HTTPS(超文本传输安全协议)已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本,通过SSL协议加密数据传输,不仅能保护用户数据的安全,还能提升搜索引擎排名&#xff…

一文带你搞懂C++友元和类型转换

6. C友元 在C中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。…

【ai】Easy-RAG 6:安装bge-reranker-large、 成功部署并通过frpc访问

作者用到了funasrwhisper还有RAG的rerank模型这里用的是bge-reranker-large , 要从 https://huggingface.co/BAAI/bge-reranker-large 下载。AttributeError: module ‘numba’ has no attribute ‘jit’ 【ai】Easy-RAG 4: 修复依赖项:numpy numba omegaconf 等作者的地址是…

英特尔宣布针对对Llama 3.1进行优化 以提升所有产品的性能

日前Meta正式发布了Llama 3.1开源大模型,以其庞大的参数量和卓越性能,首次在多项基准测试中击败了GPT-4o等业界领先的闭源模型。允许开发者自由地进行微调、蒸馏,甚至在任何地方部署,这种开放性为AI技术的普及和创新提供了无限可能…

关于promise的一些例题(运行步骤详细说明)

关于promise的一些例题(详细说明) 基本例题 // 直接运行 输出 1 2 const promise new Promise((resolve, reject) > {console.log(1);resolve();console.log(2); });// then后面放入微队列 promise.then(() > {console.log(3); });// 输出4 之后没有代码了所以运行为队…

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类,运行时异常举几个例子,什么情况下会出现?6、讲一下Java中线程的…

【管控业财一体化】

1. 引言 大型集团在现代企业管理中扮演着举足轻重的角色,其管控业财一体化解决方案是实现企业高效运营的关键。随着数字化转型的加速,业财一体化不再局限于财务与业务流程的简单融合,而是向着更深层次的数据驱动、智能化决策和价值创造方向发…

光猫设置桥接 路由器pppoe拨号 设置正常访问光猫 (openwrt)

网络信息展示 光猫桥接很简单吧,就不说了。先来列出修改前的网络接口和网络信息。 光猫192.168.1.1,openwrt 10.0.0.0/8 初始配置 需要记录的信息:WAN的网络设备(eth1),光猫的IP(192.168.1.1&am…

RV1126 Linux 系统,接外设,时好时坏(一)应该从哪些方面排查问题

在 Linux 系统中接外设时,遇到“时好时坏”的问题,可能是由多种因素引起的。以下是一些排查问题的建议。 1. 硬件方面的排查 1.1 连接检查 物理连接: 确保外设与主板之间的连接良好,检查插头、插座及线缆是否牢固。引脚配置: 确认设备树中引脚的配置是否正确,尤其是引脚…