<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.mzph.cn/news/610948.shtml

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

相关文章

Node.js 多线程实战:如何有效利用多线程能力

在 Node.js 的世界中,多线程技术一直是一个受到广泛关注的领域。最初,Node.js 设计为单线程模式。随着技术发展,Node.js 引入了多线程支持,进而利用多核处理器的强大性能,提升了应用性能。接下来的内容将深入探讨 Node…

【c++笔记】总结!c++与c语言的不同之处

(Θ3Θ) hi~ 众所周知\(^o^)/~,c语言和c联系密切,又相互区别,本篇文章主要介绍c与c语言的区别与联系以及一些简单的不同点的运用,很适合刚接触c的朋友,一起来瞧瞧看吧~~ 目录 一、文章内容梗概 二、概念…

世微 AP6317 DC单节同步3A锂电充电芯片

AP6317是一款面向5V交流适配器的3A锂 离子电池充电器。它是采用800KHz固定频率的同 步降压型转换器,因此具有高达92%以上的充电效 率,自身发热量极小。 包括完整的充电终止电路、自动再充 电和一个度达1%的4.2V预设充电电压,内 部集成了防反灌…

【算法Hot100系列】搜索旋转排序数组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

web缓存之nginx缓存

一、nginx缓存知识 网络缓存位于客户端和 "源服务器 "之间,保存着所有可见内容的副本。当客户端请求缓存中存储的内容时,它可以直接从缓存中检索内容,而无需与服务器通信。这样,网络缓存就 "接近 "了客户端&a…

Opentsdb官方优化文档 - 翻译

文档地址 : Tuning — OpenTSDB 2.4 documentation Tuning As with any database there are many tuning parameters for OpenTSDB that can be used to improve write and read performance. Some of these options are specific to certain backends, others are global. …

在线双目测宽仪 板材实时监测和数据分析!

在各种板材类生产领域里,在线品质检测技术都是非常重要的,它很大程度上决定了生产的质量。在线双目测宽仪就是当前很受欢迎的一种宽度在线检测设备,它采用了双目视觉检测技术,实现宽度尺寸的在线检测,功能十分强大&…

java物品检验管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 物品检验管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

手把手教你如何用python进行数据分析!(附四个案例)

一、前期准备 三个包:Numpy、Pandas和matplotlib;工具:jupyter notebook。首先确保导入这两个包 #导入Numpy包 import numpy as np #导入Pandas包 import pandas as pd二、基础知识 Pandas有三种数据结构:Series、DataFrame和P…

2024 CSRankings全球计算机科学排名发布!清华AI第一,哈工大NLP第一

大家好我是二狗。 这两天全球计算机科学排名 CSRankings 2024发布啦! 下面二狗就带大家来看一下最新的排名情况。 清华、北大、上海交大AI领域霸榜前三 在AI板块,主要有人工智能、计算机视觉、机器学习、自然语言处理、网络&信息检索5个细分领域。…

冥想第一千零三十四天

1.周三,跑步跑了6.5公里,很舒服。 2.项目上全力以赴的一天。 3.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改,接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

成员变量与局部变量的区别?

如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!! 语法形式&…

外包做了5个月,技术退步一大半了。。。

先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

什么是Helm?它是如何提升云原生应用私有化部署效率的

转载至我的博客 ,公众号:架构成长指南 试想一下,如果有一个项目有50 个微服务,每个微服务都有service、deployment、ingress、pvc等 yaml 文件,算下来大概有 200 个文件,然后这个项目需要基于k8s进行私有化…

动态规划python简单例子-斐波那契数列

def fibonacci(n):dp [0, 1] [0] * (n - 1) # 初始化动态规划数组for i in range(2, n 1):dp[i] dp[i - 1] dp[i - 2] # 计算斐波那契数列的第 i 项print(dp)return dp[n] # 返回斐波那契数列的第 n 项# 示例用法 n 10 # 计算斐波那契数列的第 10 项 result fibonac…

Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】

本文发表于ICCV2023 论文地址:ICCV 2023 Open Access Repository (thecvf.com) 官方实现代码:lllyasviel/ControlNet: Let us control diffusion models! (github.com) Abstract 论文提出了一种神经网络架构ControlNet,可以将空间条件控制添加到大型…

【Linux】进程

----------------| 本文目录 |---------------- 1. 进程1.1 基本概念1.2 描述进程 - PCB1.2.1 task_struct - PCB的一种1.2.2 task_struct 内容分类 1.3 组织进程1.4 查看进程1.5 通过系统调用获取进程标示符1.6 通过系统调用创建进程 - fork初识 2. 进程状态2.1 看看Linux内核…

【贪心+循环队列】Dota2 参议院

/** 贪心循环队列* 思路:当每一个参议员行驶禁止权利时,都禁止即将行驶权利的敌方参议员。* 使用两个循环队列,队列中存放位置下标。因此只需要比较两个队列中* 处于队头元素的大小,谁小谁执行权利* auther start* cr…

数字孪生+可视化技术 构建智慧新能源汽车充电站监管平台

前言 充电基础设施为电动汽车提供充换电服务,是重要的交通能源融合类基础设施。近年来,随着新能源汽车产业快速发展,我国充电基础设施持续增长,已建成世界上数量最多、服务范围最广、品种类型最全的充电基础设施体系。着眼未来新…