<Python>PyQt5中UI界面和逻辑函数分开写的一种方式

前言
如果经常使用PyQt5这种模块来编写带UI界面的程序,那么很自然的就会涉及到,一旦程序比较大,UI控件多的时候,需要将UI和逻辑程序分离,这样方便管理,也方便维护。

配置:
平台:windows
工具:visual studio code
语言:python
库:PyQt5

本文将提供一个简单但可用的实例,在PyQt5下,分别编写一个UI布局的py文件,和一个提供函数功能的py文件,然后调用UI文件,生成窗口,使用窗口部件调用函数。

项目导览:
在这里插入图片描述

我们在项目文件夹下,新建mainUI.py、program.py两个文件,其中mainUI.py编写控件布局,program.py编写函数功能。

本文中,我们实现一个打开文本并显示文本内容的程序,那么UI界面上就需要以下部件:
按钮、标签、文本框

UI实例如下:
在这里插入图片描述
来看看以下UI代码:
MainUi.py

from PyQt5.QtCore import *        
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *class MainUI(object):def initUI(self):self.btn=QPushButton('打开文件',self)self.btn.setGeometry(40,40,80,40)self.lbl1=QLabel(self)self.lbl1.setGeometry(40,100,80,20)self.lbl1.setText('文本路径:')self.lbl2=QLabel(self)self.lbl2.setGeometry(140,100,200,20)self.le=QTextEdit(self)self.le.setGeometry(40,140,200,200)self.setWindowTitle('文本UI')self.setGeometry(100,100,400,400)self.show()

这是一个非常简单的示例,如果你需要更多的部件,那么往上添加即可。
这里说明一下,网上有很多文章都是用Qt提供的编辑器Qt designer来进行UI编辑的,这当然是没问题的,毕竟UI设计不能直接拖动部件的确是不太方便的, 但实际上,如果你的UI不是那么复杂,那么直接在visual studio code里面来编辑布局也是可以的,就是需要稍微计算一下部件的位置。
因为Qt designer设计的ui文件,还需要转换才能变为可用的py文件。
本文不使用这种方式,但逻辑上应该是差不多的,只是设计UI时方式不一样。

现在UI设计好了,那么需要进行函数功能的编写了。
在本文中涉及到两个功能,一是打开文本文件,二是读取文本内容。
program.py

打开文档:

self.path1,_=QFileDialog.getOpenFileName(self,'','E:/',"txt(*.txt);\nAll(*.*)")

使用Qfiledialog即可。

读取文本:

with open(file,'r',encoding='utf-8') as texts: rdtxt=texts.read()

使用python内置的open函数,可以打开文本文件并读取其内容。
program.py完整代码:

import sys       
import os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *from mainUI import MainUIclass MmWin(QMainWindow,MainUI):def __init__(self,parent=None):super(MmWin,self).__init__(parent)self.initUI()self.btn.clicked.connect(self.opentxt_func)def opentxt_func(self):"""打开文档"""self.path1,_=QFileDialog.getOpenFileName(self,'','E:/',"txt(*.txt);\nAll(*.*)")if os.path.exists(self.path1):self.lbl2.setText(self.path1)tt=self.readtxt_func(self.path1)print(tt)self.le.setText(tt)def readtxt_func(self,file):"""读取文档"""with open(file,'r',encoding='utf-8') as texts:rdtxt=texts.read()return rdtxtif __name__ == '__main__':app=QApplication(sys.argv)mw=MmWin()sys.exit(app.exec_())

动态演示:
在这里插入图片描述

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

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

相关文章

三、yolov8训练结果查看和模型预测

训练结果查看 1、在模型训练结束后,如下图所示,找到该文件夹。 2、然后找到weights文件夹中的best.pt文件,这就是该数据训练后的模型。 模型预测 1、在assets文件夹下创建FPC-2文件夹,放入一些同类FPC预测结果。 2、和训练…

什么是活动的DWDM网络?

DWDM系统被认为是一个基于应答器的系统,可以帮助在数据中心互连设置中在站点之间传输大量数据。不同于无源DWDM网络, DWDM网络通常包括OEO、主动DWDM Mux Demux、EDFA、DCM和其他主动WDM组件,更适合远程传输。此外,主动DWDM网络还…

x-cmd pkg | pdfcpu - 强大的 PDF 处理工具

目录 简介首次用户多功能支持性能表现安全的加密处理进一步阅读 简介 pdfcpu 是一个用 Go 编写的 PDF 处理库。同时它也提供 API 和 CLI。pdfcpu 提供了丰富的 PDF 操作功能,用户还能自己编写配置文件,用来管理和使用各种自定义字体并存储有效的默认配置…

【前端】前后端的网络通信基础操作(原生ajax, axios, fetch)

概述 前后端网络请求工具 原生ajaxfetch apiaxios GET和POST请求 get只能发纯文本 post可以发不同类型的数据,要设置请求头,需要告诉服务器一些额外信息 测试服务器地址 有一些公共的测试 API 可供学习和测试用途。这些 API 允许你发送 HTTP 请求…

5.MapReduce之Combiner-预聚合

目录 概述本地预计算 Combiner 意义实践前提代码日志观察 结束 概述 在 MR、Spark、Flink 中,常用的减少网络传输的手段。 通常在 Reducer 端合并,shuffle 的数据量比在 Mapper 端要大,根据业务情况及数据量极大时,将大幅度降低效…

Pod控制器详解

一、什么是pod控制器 Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障&am…

Excel中快速隐藏中间四位手机号或者身份证号等

注意:以下方式必须再新增一列,配合旧的一列用来对比操作,即根据旧的一列的数据源,通过新的一列的操作逻辑来生成新的隐藏数据 1、快捷方式是使用CtrlE 新建一列:手动输入第一个手机号隐藏后的号码,即在N2单…

深入理解C#中的引用类型、引用赋值以及 `ref` 关键字

深入理解C#中的引用类型、引用赋值以及 ref 关键字 在C#编程中,理解引用类型、引用赋值以及 ref 关键字的使用对于编写高效、可靠的代码至关重要。本文将深入探讨这些概念,帮助您更好地理解C#的工作原理。 引用类型简介 在C#中,所有的类型都…

「Verilog学习笔记」任意奇数倍时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule clk_divider#(parameter dividor 5) ( input clk_in,input rst_n,output clk_out );parameter CNT_WIDTH $clog2(dividor - 1) ; reg flag1, f…

基于FPGA的万兆以太网学习(1)

万兆(10G) 以太网测速视频:FPGA 实现UDP万兆以太网的速度测试 1 代码结构 2 硬件需求 SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与 SFP 一致。 3 Xilinx IP 10 Gigabit Ethernet Subsystem IP说明 文章链接: Xilinx IP 10 Gigabit Ethernet Subsystem IP 4 E…

springboot项目创建及采用本地tomcat打包发布

springboot项目发布 maven使用 解压maven安装包 修改配置文件settings.xml 更改镜像(使用maven添加依赖时&#xff0c;选择下载的地址&#xff0c;百度云已提供) <mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyu…

设备注册的多种方式

注册是将macOS、iOS或tvOS设备添加到Jamf Pro的过程。注册会将设备的库存信息提交给Jamf Pro&#xff0c;同时使得设备受到Jamf Pro的管理&#xff0c;这将允许您在设备上执行库存任务以及远程管理和配置任务。针对不同的设备类型&#xff0c;Jamf Pro提供了多种注册方式。 针对…

【数字图像处理】水平翻转、垂直翻转

图像翻转是常见的数字图像处理方式&#xff0c;分为水平翻转和垂直翻转。本文主要介绍 FPGA 实现图像翻转的基本思路&#xff0c;以及使用紫光同创 PGL22G 开发板实现数字图像水平翻转、垂直翻转的过程。 目录 1 水平翻转与垂直翻转 2 FPGA 布署与实现 2.1 功能与指标定义 …

Java学习笔记-day05-响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程&#xff0c;这里先记录下&#xff0c;响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系&#xff0c;它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

线性代数——(期末突击)矩阵(下)-习题篇(初等变换求逆矩阵、矩阵乘法、求矩阵方程、求线性方程组、解齐次线性方程组)

目录 初等变换求逆矩阵 矩阵乘法 求矩阵方程 求线性方程组 解齐次线性方程组 带有未知数的方程组 初等变换求逆矩阵 如果,则A可逆&#xff0c;且 例题&#xff1a; &#xff0c;求A的逆矩阵。 矩阵乘法 求AB&#xff0c;BA. 矩阵之间的乘法是行乘以列&#xff0c;以这…

2024年全国教资笔试报名流程(建议电脑报名),看看有啥新要求?

一.报名、考试时间节点 1.笔试报名时间: 2024年1月12日-15日 2.笔试考试时间:2024年3月9日 3.笔试成绩查询时间:2024年4月15日 4.面试报名时间:2024年4月15日 5.面试考试时间:2024年5月18日 6.面试成绩查询时间:2024年6月14日 二.笔试报名流程: 登陆→考生注册 →填报个…

git打tag以及拉取tag

场景&#xff1a;某次git代码发布后定版记录&#xff0c;将发版所在的commit时候代码打上tag记录&#xff0c;方便后期切换到对应tag代码位置。 查看所有tag名 git tag// 1.1.0 // 1.0.0查看tag和描述 git tag -l -n//1.0.0 云监管一期项目完结 //1.1.0 …

Android BUG 之 Error: Activity class {} does not exist

项目场景&#xff1a; 更换包名&#xff0c;运行报错 问题描述 原因分析&#xff1a; 在替换包名的时候要确认&#xff0c;配置文件跟build中的保持一致&#xff0c;在更换后还要将旧包的缓存数据清理掉 解决方案&#xff1a; 1 替换后删除 app 下的build 文件夹 2 Rebuild Pr…

AI论文润色平台一览,让你的论文更加流畅易懂!

之前其实比较犹豫&#xff0c;是否应该整理一篇关于可辅助论文写作的在线平台的文章。因为论文这个事情&#xff0c;更重要的是要有个人的思考&#xff0c;要亲自动手写&#xff0c;这涉及到诚信的问题。然而&#xff0c;通过AI直接生成的论文可能很难通过查重和AI检测&#xf…

STM32F103C8T6(HAL库函数 - 内部Flash操作)

简介 STM32F103C8T6 内部Flash 为 64KB&#xff0c;本次将对他多余空间进行读写。 介绍 数据手册下载 STM32F103x8/STM32F103xB 数据手册 包含Flash Memory Page分布 STM32F设备命名 设备容量类型 中容量类型 内部空间介绍 64 KBytes大小Flash Memory 从 0x0800 0000 ~…