快速构建一个ui界面程序--pyqt入门

news2024/9/22 11:29:42

快速构建一个ui界面程序--pyqt入门

  • 0 背景
  • 1 环境准备
    • 1.1 安装python
    • 1.2 安装pyqt
  • 2 UI设计
    • 2.1 启动UI设计可视化工具
    • 2.2 生成*.ui文件
    • 2.3 编译ui生成对应的py
  • 3 使用UI

0 背景

本文档用于记录开发者如何快速构建一个简单UI程序。开发者使用文档中提及的工具并用于商业活动时,请注意对应工具的使用协议。

本文介绍如何使用pyqt快速构建一个简单UI,此类需求常见于个人小型工具可视化,原型机demo开发的场景中。

选用pyqt进行UI构建的一个原因:

1 环境准备

1.1 安装python

这个不细讲,linux一般出厂自带python工具,其它系统参考python官网。

1.2 安装pyqt

命令行环境下使用pip工具进行安装,如果无法下载,请搜索“python 安装 pyqt”。以下命令考虑国内开发者,使用了华为的pip源加速。

pip install PyQt5 -i https://mirrors.huaweicloud.com/repository/pypi/simple
pip install pyqt5-tools -i https://mirrors.huaweicloud.com/repository/pypi/simple

2 UI设计

2.1 启动UI设计可视化工具

安装pyqt时会对应按照Designer工具,用于做可视化的界面设计。可以在任务栏搜索到对应的工具。也可以在命令行窗口输入designer来启动这个工具。
在这里插入图片描述

2.2 生成*.ui文件

进入designer可视化设计界面之后,左上角"文件"->“新建”。
创建一个界面设计的窗体,这里我们直接默认MainWindow就好。
在这里插入图片描述

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

按上图的方式设计一个简易的UI。选中“文件”->“另存为”,保存即生成对应的.ui文件了。我这里偷懒,就叫ui.ui了。空间还可以改对应的名字,这里也偷懒,就保留了默认名字。

在这里插入图片描述

2.3 编译ui生成对应的py

命令行中,使用pyuic工具编译ui文件,把ui.ui编译为python脚本。

pyuic5 -o ui.py ui.ui

在这里插入图片描述
查看一下生成的ui.py,关注到里头就一个类Ui_MainWindow。我们需要重点关注的就是类中setupUi接口。

# auto generated ui.py
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    	# ...

稍微读一下setupUi,发现里面是在设置我们的MainWindow名字大小等属性,并创建pushButtonlabel控件。猜测我们把一个显示在前端的MainWindow对象传给setupUi,它就会帮我们按ui.ui文件进行设置。自此,我们的前端ui设计工作就完成了,我们只需要在主函数搞一个前端MainWindows,传给setupUi即可。

3 使用UI

根据第2节对ui.py的猜测,构造一个使用该UI的范例main.py如下:

在这里插入图片描述

# -- coding: utf-8 -- 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QComboBox
# 从生成的代码ui.py中导入Ui_MainWindow类
from ui import Ui_MainWindow as Ui_MainWindow

# 创建一个MainWindow类,继承于QMainWindow
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 持有一个ui格式
        self.ui = Ui_MainWindow()
        # 将自己传给ui,让它帮忙设计样式
        self.ui.setupUi(self)
        # 将ui中pushButton控件的clicked事件关联到处理函数on_click
        self.ui.pushButton.clicked.connect(self.on_click)

	# pushButton的回调函数,注意这个名字并非限定为on_click
    def on_click(self):
    	# 使用ui中的label显示"clicked"
        self.ui.label.setText("clicked!")


if __name__ == "__main__":
	# 启动一个前端窗口标准操作
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

main.py中,把控件pushButtonclicked事件(Qt里面有时候也叫信号)和回调函数on_click关联了起来。然后在on_click里面设置控件label进行输出。

对于pushButton控件和label控件有哪些信号,对应的回调函数入参是什么,还有哪些功能,本文不深入探究,有需要的开发者请参考Qt的文档进行查询。

命令行执行python main.py,效果如下:

在这里插入图片描述

点击按钮,结果如下。

在这里插入图片描述

可以看到点击按钮后,label的输出发生了变化。自此,我们完成了一个最简易的前端UI搭建。开发者后面根据具体情况随机应变即可。

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

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

相关文章

【法如faro】三维激光软件Scene2023数据处理(自动配准并转换坐标)流程

Scene2023数据处理(自动配准并转换坐标)的主要流程为:新建项目、导入数据、处理、自动注册、坐标系转换、模型导出立和面模型导出等。 文章目录 一、新建项目二、导入数据三、处理四、自动注册五、坐标系转换六、模型导出七、立面模型导出八、创建项目点云九、导出一、新建项…

将二叉搜索树转化为排序的双向链表

题目描述 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。 对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 特别地,我…

shell了解和问答机制

GUI(图形用户界面) 定义与特点: GUI全称为Graphical User Interface,即图形用户界面。 它是一种采用图形方式显示的计算机操作用户界面,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令…

海康二次开发学习笔记12-从Group外部输入图像

从Group外部输入图像 用OpenCV从本地读图 当Group内部无图像源模块时,可以通过代码的方式将图片传入Group内部.实现方式有多种,可以使用OpenCV从本地读图,可在程序集搜索引用OpenCvSharp,同时将其复制本地的属性改为False. 1. 界面设计 增加加载图像按钮 2. 处理…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(二)- 3GPP Release16 内容

一、引言: 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划,是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析(一&#xff…

学习Kerberos

学习Kerberos Kerberos的 是一种分布式、基于票证的身份验证服务,因为基于分布式,可能这种类型的协议我们平时接触比较少,Web端一般都是通过Cookie、Token、Oauth、Password等各种协议认证,客户端通过Ssh、Password等认证方式&am…

WAF的功能、检测、指纹及绕过

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

尝试用java spring boot+VUE3实现前后端分离部署

前言 这几天开学了,公司这边几个和学校对接的项目都挺忙的,然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目,大佬让我自己去学了。在看若依的项目的时候在想,python的FLASK后端实现和JAVA spring boot的实现差别大不…

Redis与SpringMVC的整合与最佳实践

整合Redis与Spring MVC(现在通常是Spring Boot的一部分)可以提高应用性能,特别是在处理大量数据缓存和会话状态管理方面。 下面是一些关于如何整合Redis与Spring MVC的最佳实践: 1. 引入依赖 首先,你需要在你的项目中…

Linux之grafana+onealert报警

grafana介绍 Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。 grafana安装与登录 在grafana服务器上安装grafana 下载地址:https://grafana.com/grafana/downloa…

包装类及常量池

1、基本数据类型byte、short、int、long、char、boolean的包装类用到了常量池,大小在127以内的从常量池获取; 2、基本数据类型中float、double没有实现常量池技术; 3、java中字符串实现常量池技术; public class Test {public …

电机设计及电机仿真“新工具”—仿真APP

电机仿真APP可以广泛应用于电机设计、制造、测试和维护领域,具有强大的计算能力,能够模拟电机的各种工作状态和参数变化。用户可通过调整仿真参数,快速得到电机的响应和性能参数,从而进行针对性的优化和改进。借助仿真APP&#xf…

动态规划法例题

第一个空,用手工计算,可以用贪心法 先选择价值最大的物品,有两个价值是6的物品,重量合计246 剩余4个空间,只能放重量为2的物品,一共是66315 第二个空,需要将所有物品都放进背包舱室&#xff…

黄力医生:血压高降不下来找准这三个方向真的降下来了

在心脑血管疾病的诊疗中,高血压作为一种常见的慢性病,其管理和控制对于预防心脑血管疾病的发生和发展至关重要。然而,许多患者面临血压居高不下、难以控制的困境。今天,我们有幸邀请到心脑血管科专家黄力医生,为大家深…

React中实现antd自定义图标,鼠标悬浮变色

借助 antd 的 tooltip 组件来实现 hover 时变色的效果 1.新建组件 自定义图标一般在iconfont上面获取,复制下来的svg代码,切记要删除 fill 属性后添加到组件中 import { Tooltip } from "antd"; import React from "react";const …

【JavaWeb】Cookie、Session

文章目录 Cookie、Session一、Cookie(客户端)1、Cookie 的 特点2、Cookie 的 工作原理3、Cookie 的 基本操作5、Cookie 的 域名与路径6、Cookie 的 存活时间7、Cookie 的 删除 二、Session(服务端)1、Session 的 特点2、Session 的…

Mysql性能优化之自适应索引

自适应索引 是什么 自适应哈希索引是 InnoDB 存储引擎为了提高特定类型查询性能而自动构建的一种内存中的哈希索引结构。它可以根据查询模式和数据访问频率自动调整,以优化数据库的性能。 与BTree的区别 与传统的 B-tree 索引不同,哈希索引使用哈希函…

基于Java的旅游服务管理系统的设计与实现(论文+源码)_kaic

摘 要 伴随着人们生活水平的提高,服务行业也得到了飞速发展。人们对旅游活动也越来越重视。很多旅游爱好者以及生活压力过大的人都会选择周末,节假日或自己休闲时外出旅游,换种环境来放松心情,缓解工作压力,尽享别样生…

GHA文章是AI文章吗?

对于想做外贸的客户来说,谷歌SEO成为了每个网站的必攻课题,而在SEO策略中,内容质量至关重要,而现在,ai产业的发达也让不少人看见出海的希望,因为内容可以让ai生成,那么,现在火爆seo圈…

Leetcode199二叉树的右视图(java实现)

今天我们分享的题目是199题,题目描述如下: 那么本道题的解题思路呢就是使用层序遍历,每次将每层中的最后一个元素加入到我们的集合中。 本道题目和之前的层序遍历二叉树的题目很像,但是需要注意的细节。那么我会在代码中指出。 代…