Python - PyQt6、QDesigner、pyuic5-tool 安装使用

Python 开发可视化界面可以使用原生的 tkinter,但是原生框架使用起来颇为不方便,所以最流行的还是QT UI框架,QT是使用C++语言开发,Python 想使用需要对其进行封装,所以就出现了PyQt框架,这个框架使用极其方便,而且可以多端运行。

1.安装 PyQt 框架

本人使用的是Mac 2023款 Apple M1芯片,Python版本是3.9,开发IDE使用的 PyCharm
Qt 官网文档 ,
https://www.qt.io/download
https://riverbankcomputing.com/software/pyqt/download

Qt的长期支持版(LTS)有 Qt 5.15Qt 6.2Qt 6.5,所以我首先选的是 PyQt5 版本下载

pip install PyQt5

问题开始出现了,安装 PyQt5报错了 Encountered error while generating package metadata

      sipbuild.pyproject.PyProjectOptionException[end of output]note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed× Encountered error while generating package metadata.
╰─> See above for output.

首先不是pip的问题,pip我已经更新到最新了,查找好多资料,基本可以确定是Python3.9版本过高导致的,需要使用Python3.7版本,但是我没有去给Python降级,因为电脑中还有需要使用Python的地方用到该版本的,这里降级在引出别的问题,所以放弃 PyQt5,下面安装PyQt6

pip install PyQt6

很幸运币,顺利就安装好了!!
在这里插入图片描述

试用下看看效果

from PyQt6.QtWidgets import *  # 导入PyQt6if __name__ == '__main__':app = QApplication(sys.argv)w = QWidget()w.setWindowTitle("我是一个Window")w.show()app.exec()

一切顺利,运行起来了

在这里插入图片描述

2. 安装 QtDesigner

PyQt6使用纯代码进行布局,作为开发者肯定无法接受,尤其是作为iOS开发的我用惯使用了 StoryBoardXib等拖拽控件的方式进行布局,PyQt也有这种方式就是 QtDesigner

QtDesigner 下载地址:https://build-system.fman.io/qt-designer-download。

在这里插入图片描述
选择 Mac 版下载,然后安装:

在这里插入图片描述

PyCharm中安装External Tool,PyCharm -> settings -> Tools -> External Tool

在这里插入图片描述
1.Name: 随意填写 例如 QtDesigner;
2.Program:这个就是我们上面下载的 Qt Designer App 路径 /Applications/Qt Designer.app
3.Working directory:项目工作目录,固定填写 $ProjectFileDir$

其他项可不填写,点击 OK 保存。然后我们在PyCharm的导航栏Tools中查看是否已经添加好了:

在这里插入图片描述
QtDesigner已经存在了,说明已经添加好了,然后点击这个插件,会出现下面6个视图,最用基本上见名知意,很好理解:
在这里插入图片描述

点击中间视图的 Create 按钮,创建一个Window或者Widget:

在这里插入图片描述

中间就是一个Widget我拖拽了两个QLabel两个QLineEdit以及一个QPushButton,当然你可以随意拖拽任意组件,点击保存:

在这里插入图片描述
保存到桌面,会生成一个.ui文件,即 my_widget.ui

在这里插入图片描述
在这里插入图片描述

我们将这个文件拖到我们项目中

在这里插入图片描述

如果想加载这个文件需要用到 pyuic5-tool ,下面来安装这个库。

3.安装 pyuic5-tool

 pip install pyuic5-tool

安装结果

(venv) sunshiyu@sunshiyudeMacBook-Pro-2 gui-demo % pip3 install pyuic5-tool
Collecting pyuic5-toolDownloading pyuic5_tool-0.0.1-py3-none-any.whl (9.8 kB)
Installing collected packages: pyuic5-tool
Successfully installed pyuic5-tool-0.0.1

很幸运Python3.9直接安装成功。好的,我们继续来加载上面的 my_test.ui 文件:

import sysfrom PyQt6.QtCore import *
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
from PyQt6 import uicif __name__ == '__main__':passapp = QApplication(sys.argv)mw = uic.loadUi("./my_test.ui")  # 加载.ui文件,传入其所在路径即可mw.show()app.exec()

我们想如果能将 my_test.ui 文件转成 .py文件 ,那不是更爽吗?是的,我们可以实现它,接下来我们安装第二个插件:

在这里插入图片描述

和QtDesigner很相似,填写数据:

1.Name:随便写,例如 pyUIC;
2.Program:这个是我们安装 pyuic5-tool 的路径,我的是在venv中,/Users/sunshiyu/Desktop/其他/Python/gui-demo/venv/bin/pyuic6
3.Arguments:基本也是固定写法$FileName$ -o $FileNameWithoutExtension$.py
4.Working directory:工作路径 $FileDir$

pyuic6的路径在:
在这里插入图片描述

点击 OK,我们用相同的方式查看该插件是否已经添加完成:

在这里插入图片描述

显然已经添加成功,下面右键点击my_test.ui文件 -> External Tools -> pyUIC,点击插件 pyUIC,就会在同目录下生成一份my_test,py文件,如下图:

在这里插入图片描述
生成的代码如下:

# Form implementation generated from reading ui file 'my_test.ui'
#
# Created by: PyQt6 UI code generator 6.5.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt6 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(491, 378)self.pushButton = QtWidgets.QPushButton(parent=Form)self.pushButton.setGeometry(QtCore.QRect(190, 270, 113, 32))self.pushButton.setObjectName("pushButton")self.label = QtWidgets.QLabel(parent=Form)self.label.setGeometry(QtCore.QRect(40, 30, 60, 16))self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(parent=Form)self.label_2.setGeometry(QtCore.QRect(40, 60, 60, 16))self.label_2.setObjectName("label_2")self.lineEdit = QtWidgets.QLineEdit(parent=Form)self.lineEdit.setGeometry(QtCore.QRect(100, 30, 113, 21))self.lineEdit.setObjectName("lineEdit")self.lineEdit_2 = QtWidgets.QLineEdit(parent=Form)self.lineEdit_2.setGeometry(QtCore.QRect(100, 60, 113, 21))self.lineEdit_2.setObjectName("lineEdit_2")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.pushButton.setText(_translate("Form", "点击"))self.label.setText(_translate("Form", "账号:"))self.label_2.setText(_translate("Form", "密码:"))

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element的el-select给下拉框添加背景

第一步 :popper-append-to-body"false" <el-selectv-model"value"placeholder"请选择":popper-append-to-body"false"><el-optionv-for"item in options":key"item.value":label"item.label&quo…

【算法专题突破】双指针 - 最大连续1的个数 III(11)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;1004. 最大连续1的个数 III - 力扣&#xff08;Leetcode&#xff09; 这道题不难理解&#xff0c;其实就是求出最长的连续是1的子数组&#xff0c; 但是&#xff0c;他支…

Spring Reactive:响应式编程与WebFlux的深度探索

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

2023-简单点-什么是protobuf?

protobuf mother: 谷歌 作用 序列化 人话&#xff1a; 存储数据的一种结构 优势在&#xff1f; 类型安全 易用性好 序列化/反序列性能好 兼容性好 不仅可以定义结构体&#xff0c;还可以定义rpc服务接口 劣势在&#xff1f; 可读性较差&#xff1a;没有schema的情况下&a…

Linux--进程--进程-父进程退出

1.进程退出函数 进程退出分为正常退出&异常退出 正常退出&#xff1a; 1、main函数调用return 2、进程调用exit(),标准c库 3、进程调用_exit()或者_Exit(),属于系统调用 补充 1、进程最后一个线程返回 2、最后一个线程调用pthread_exit 异常退出&#xff1a; 1、调用abo…

【开箱即用】开发了一个基于环信IM聊天室的Vue3插件,从而快速实现仿直播间聊天窗功能

前言 由于看到有部分的需求为在页面层&#xff0c;快速的引入一个包&#xff0c;并且以简单的配置&#xff0c;就可以快速实现一个聊天窗口&#xff0c;因此尝试以 Vue3 插件的形式开发一个轻量的聊天窗口。 这次简单分享一下此插件的实现思路&#xff0c;以及实现过程&#xf…

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波&#xff08;Mean Filter&#xff09;是一种简单的滤波技术&#xff0c;用于平滑图像并减少噪声。它的原理非常简单&#xff1a;对于每个像素&#xff0c;将其与其周围邻域内像素的平均值作为新的像素值…

5.9.Webrtc线程事件处理

在前面的课程中呢&#xff0c;我已经向你介绍了事件处理的一些基础知识&#xff0c;那今天呢&#xff0c;我们再来看一下外边儿rtc下事件处理的基本逻辑是什么&#xff1f; 那首先呢&#xff0c;我们来看一下事件是如何协调线程工作的&#xff0c;那就如果这张图所展示的有两个…

简单5步骤搞定windows server2019 配置IIS支持PHP

测试成功&#xff0c;记录一笔&#xff0c;感谢网上各位大佬的技术支持。 一、安装vcredist_x64.exe 否则可能会出现 FastCGI进程意外退出 二、IIS开启CGI&#xff08;可能需要重启&#xff09; 控制面板&#xff0c;启用或关闭windows程序&#xff0c;IIS--应用程序开发--CGI…

java封装国密SM4为 jar包,PHP调用

java封装国密SM4为 jar包,PHP调用 创建java工程引入SM4 jar包封装CMD可调用jar包PHP 传参调用刚用java弄了个class给php调用,本以为项目上用到java封装功能的事情就结束了,没想到又来了java的加密需求,这玩意上头,毕竟不是强项,没办法,只好再次封装。 但是这次的有点不…

CSS笔记(黑马程序员pink老师前端)盒子阴影,文字阴影

盒子阴影 属性值为box-shadow,盒子阴影不占空间,不影响盒子之间的距离. 值说明h-shadow必需,水平阴影位置,允许为负值v-shadow必需,水平阴影位置,允许为负值blur可选,模糊距离,数值越大影子越模糊spread可选,影子的尺寸color可选,影子的颜色inset可选, 将外阴影改为内阴影(省…

GO语言网络编程(并发编程)Goroutine池

GO语言网络编程&#xff08;并发编程&#xff09;Goroutine池 1. Goroutine池 1.1.1. worker pool&#xff08;goroutine池&#xff09; 本质上是生产者消费者模型可以有效控制goroutine数量&#xff0c;防止暴涨需求&#xff1a; 计算一个数字的各个位数之和&#xff0c;例…

router-link 和 router-view的区别

router-link 实现路由之间的跳转 router-view&#xff08;路由出口组件 -> 渲染路径匹配到的视图组件&#xff09; 当你访问的地址与路由path相符时&#xff0c;会将指定的组件替换该router-view router-link router-link 点击实现路由跳转&#xff0c;to属性指向目标地址&…

VM+Ubuntu+Xshell+Xftp安装教程

目录 VM17安装教程 检查网络连接 Ubuntu环境搭建 UBUNTU 系统配置 1、 SSH 服务器配置 服务端&#xff08;必须&#xff09; 1.安装 ssh 服务端 2.确认 sshserver 是否启动了&#xff08;看见 sshd 说明已启动&#xff09; 3.启动 sshserver 4.SSH 配置&#xff08;如果…

【科普向】Jmeter 如何测试接口保姆式教程

现在对测试人员的要求越来越高&#xff0c;不仅仅要做好功能测试&#xff0c;对接口测试的需求也越来越多&#xff01;所以也越来越多的同学问&#xff0c;怎样才能做好接口测试&#xff1f; 要真正的做好接口测试&#xff0c;并且弄懂如何测试接口&#xff0c;需要从如下几个…

【数据结构面试题】栈与队列的相互实现

目录 1.队列实现栈 1.1创建栈 1.2判断是否为空 1.3入栈 1.4出栈 1.5获取栈顶元素 1.6完整代码 2. 用栈实现队列 2.1创建队列 2.2判断是否为空 2.3入队列 2.4出队列 2.5获取队头元素 2.6完整代码 1.队列实现栈 用队列实现栈https://leetcode.cn/problems/impleme…

软件设计模式(三):责任链模式

前言 前面荔枝梳理了有关单例模式、策略模式的相关知识&#xff0c;这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式&#xff0c;希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~ 文章目录 前言 责任链模式 1 简单场景 2 责任链模式理解 3 Java下servl…

【MFC】实现简单UDP通信

创建项目&#xff0c;初始化套接字 创建一个基于对话框的MFC项目&#xff08;名称为UDP&#xff09;&#xff0c;高级功能选中Windows套接字 这个时候在CUDP类的InitInstance()方法中就会出现这样的代码用来初始化套接字 if (!AfxSocketInit()) {AfxMessageBox(IDP_SOCKETS_…

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识&#xff0c;这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性&#xff1a;确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性&#xff1a;保证数…

让GPT成为您的科研加速器丨GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。​2、数据可视化…