<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 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_())

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

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 11:56:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 11:56:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 11:56:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 11:56:04       18 阅读

热门阅读

  1. 【PostgreSQL】表管理-表继承

    2024-01-10 11:56:04       34 阅读
  2. 业务记录笔记

    2024-01-10 11:56:04       36 阅读
  3. docker容器内,将django项目数据库改为postgresql

    2024-01-10 11:56:04       40 阅读
  4. QT下的几种实现modbus的库,记录

    2024-01-10 11:56:04       39 阅读
  5. uniapp(vue2)+VoerkaI18n多语言

    2024-01-10 11:56:04       38 阅读
  6. 洛谷 P8661 [蓝桥杯 2018 省 B] 日志统计

    2024-01-10 11:56:04       35 阅读
  7. 38.外观数列

    2024-01-10 11:56:04       38 阅读
  8. 基于llama.cpp学习开源LLM本地部署

    2024-01-10 11:56:04       40 阅读
  9. 数据分析-Pandas如何选择数据子集

    2024-01-10 11:56:04       40 阅读
  10. 【代码随想录】刷题笔记Day49

    2024-01-10 11:56:04       30 阅读