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

news2024/9/23 9:27:26

前言
如果经常使用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 MainUI

class 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 rdtxt
    
if __name__ == '__main__':
    app=QApplication(sys.argv)
    mw=MmWin()
    sys.exit(app.exec_())

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

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

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

相关文章

工程监测中振弦采集仪的数据处理方法研究

工程监测中振弦采集仪的数据处理方法研究 工程监测中振弦采集仪的数据处理方法研究是针对振弦采集仪所采集到的数据进行分析和处理,以获得需要的监测信息和结构响应。以下是一种常见的数据处理方法: 1. 数据清洗: 首先对采集到的原始数据进行清洗&#…

python爬取豆瓣影评,涉及知识点:bs4,requests、time、random

页面源代码: <!DOCTYPE html> <html lang="zh-CN" class="ua-windows ua-webkit"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="renderer" conten…

Low Poly Cartoon House Interiors

400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…

【HarmonyOS4.0】第四篇-ArkUI基础实战

一、ArkUI框架简介 ArkUI开发框架是方舟开发框架的简称&#xff0c;它是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架&#xff0c;它使用极简的UI信息语法、丰富的UI组件以及实时界面语言工具&#xff0c;帮助开发者提升应用界面开发效率 30%&#xff0c;开发…

Uibot (RPA设计软件)培训前期准备指南————课前材料三

(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; 紧接着小北的前两篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/1…

2024-01-09 Android.mk 根据c文件名插入特定的宏定义,我这里用于定义log LOG_TAG 标签

一、在Android的构建系统中&#xff0c;使用Android.mk构建脚本可以根据特定需求来定义宏。如果你想根据C文件的名称来插入特定的宏定义&#xff0c;可以使用条件语句检查文件名&#xff0c;并相应地设置宏。 在Android的构建系统中&#xff0c;使用Android.mk构建脚本可以根据…

灵活使用Redis高可用

1 Redis高可用 1.1 Redis的高可用方式 主从复制&#xff1a; 主从复制时高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制的基础上实现高可用。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;复制恢复无法…

期货日数据维护与使用_日数据维护_主力合约计算逻辑

目录 主力合约换月规则&#xff08;文化财经&#xff09; 主力合约计算逻辑 数据准备 代码 ​下载 主力合约换月规则&#xff08;文化财经&#xff09; 主力合约计算逻辑 数据准备 本文以沪银为例&#xff0c;将沪银所有日数据文件放入一个文件夹中&#xff0c;文件名命…

OBD汽车

相当于客户端与服务器 诊断设备流程 》》》》诊断服务 OBD很多的定死了 Vme就很灵活 WWH 就是两个的结合 OBD15031 SID PID 可以自己定义一些 一个字节255个 两个有效字节 02 01 0D 5555&#xff08;随机值&#xff09;这是请求 两个有效字节 01 OD&#xff08;请求速…

C# Emgu.CV4.8.0读取rtsp流录制mp4可分段保存

【官方框架地址】 https://github.com/emgucv/emgucv 【算法介绍】 EMGU CV&#xff08;Emgu Computer Vision&#xff09;是一个开源的、基于.NET框架的计算机视觉库&#xff0c;它提供了对OpenCV&#xff08;开源计算机视觉库&#xff09;的封装。EMGU CV使得在.NET应用程序…

Java药物不良反应ADR智能监测系统源码

药物不良反应&#xff08;Adverse Drug Reaction&#xff0c;ADR&#xff09;是指在使用合格药品时&#xff0c;在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用方式、个体差异等因素而异&#xff0c;可能导致患者身体不适、病情恶化。 为保…

多PC文件夹同步方案

在多个工作终端独立具备svn版本库的情况下&#xff0c;可使用本工具进行一键同步。 相较于传统的SVN中心检出更新方案中移动存储设备硬件及文件目录系统多终端间易损坏&#xff0c;本方案更加稳定 资料同步结构&#xff1a; 使用步骤&#xff1a; 1.修改config.ini配置文件 2…

通付盾受邀出席2024安全市场年度大会,荣获“数字安全产业杰出贡献奖”!

1月5日&#xff0c;由国内数字产业独立的第三方调研咨询机构数世咨询主办&#xff0c;以“数字安全&#xff0c;未来可期”为主题的2024安全市场年度大会在北京举办。来自国内网络安全厂商300多人以线上线下方式参加本次大会&#xff0c;通过4个多小时高能演讲&#xff0c;聚焦…

力扣刷题-二叉树-合并二叉树

617.合并二叉树&#xff08;经典&#xff09; 合并二叉树是操作两棵树的题目里面很经典的&#xff0c;如何对两棵树遍历以及处理&#xff1f; 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并…

type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

HTAP(Hybrid Transactional/Analytical Processing)系统之统一存储的实时之道

文章目录 HTAP与时俱进LASER中的存储关键知识LSM&#xff08;Log-Structured Merge Tree&#xff09;SkipList&#xff08;跳表&#xff09;CDC&#xff08;Changed Data Capture&#xff09;SST&#xff08;Sorted Sequence Table&#xff09; 特性列组&#xff08;Column Gro…

MySQL深入——9

如何正确的显示随机信息&#xff1f; 我们来模拟在英语单词app当中随机出现三个英语单词的情况&#xff0c;我们首先创建一张表words&#xff0c;然后给这个表当中插入10000条信息进行量化。 select word from words order by rand() limit 3&#xff1b; order by rand&…

【炼丹神器】wandb实践之sweep超参扫描工具

文章目录 一、四步上手wandb二、四步玩转sweep 参考官方文档&#xff1a;https://docs.wandb.ai/guides/sweeps/define-sweep-configuration 一、四步上手wandb 首先&#xff0c;wandb其实类似tensorboard&#xff0c;mindinsight&#xff0c;都是观察训练时的学习率&#xff0…

pyqt调用UI和开启子进程

UI制作 qrc 注意调用UI前把样式表里绑定的资源(qrc)转换成py导入进去 xxx.qrc转xxx.py 两种方法 1命令 pyrcc5 -o icons_rc.py icons.qrc 2外部工具pyrcc 实参 -o $FileNameWithoutExtension$.py $FileNameWithoutExtension$.qrcsdz.qrc→→sdaz.py 在代码里写 import…

Hyperledger Fabric 二进制安装部署 Peer 节点

规划网络拓扑 3 个 orderer 节点&#xff1b;组织 org1 , org1 下有两个 peer 节点&#xff0c; peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点&#xff0c; peer0 和 peer1; 节点宿主机 IPhosts端口cli192.168.1.66N/AN/Aorderer0192.168.1.66orderer0.example.com70…