PyQt5 如何让界面和逻辑分离的方法


Posted in Python onMarch 24, 2020

前言

我们已经知道利用QtDesigner来设计界面,并通过Pycharm外部工具PyUIC将其转化成py源文件。不过由于要响应事件操作,往往会将相应的槽函数写在ui的py文件中,这样,界面和逻辑开发就混合在一起了,每一次的ui更新都会伴随着转换后py文件的槽函数的添加修改,及其不方便,造成效率低下。本例就来介绍如何将二者剥离。

实例讲解

设计ui

我们通过Pycharm新建一个项目,并打开QtDesigner做一个简答的界面mainwindow.ui,在其上添加两个Button对应ID为World和China,一个label对应ID为Title,一个Line Edit对应的ID为lineEdit

ui转换成py

在Pycharm中项目文件中选择mainwindow.ui右键选择外部工具?PyUIC,生成py源文件ui_mainwindow.py

剥离ui和逻辑

在项目中新建文件mainwindow.py,创建类MainWindow类

from PyQt5 import QtCore, QtGui, QtWidgets
from ui_mainwindow import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  def __init__(self, parent=None):
    super(MainWindow, self).__init__(parent)
    self.setupUi(self)

    self.Title.setText("hello Python")
    self.World.clicked.connect(self.onWorldClicked)
    self.China.clicked.connect(self.onChinaClicked)
    self.lineEdit.textChanged.connect(self.onlineEditTextChanged)

  def onWorldClicked(self, remark):
    print(remark)
    self.Title.setText("Hello World")

  def onChinaClicked(self):
    self.Title.setText("Hello China")

  def onlineEditTextChanged(self,p_str):
    self.Title.setText(p_str)

 在这里去绑定相应的signal和slot,实现业务逻辑,这样代码结构也清晰多了,以后如果再遇到ui更新,我们只需将更新的ui文件替换并生成行的ui_***.py,这样就实现了ui和逻辑的分离。

main函数中调用

在项目中新建主函数main.py,在其上实例化类MainWindow,并调用show方法显示

from PyQt5 import QtCore, QtGui, QtWidgets
from mainwindow import MainWindow
import sys

if __name__ == "__main__":
  app = QtWidgets.QApplication(sys.argv)
  mainWindow = MainWindow()
  mainWindow.show()
  sys.exit(app.exec_())

到此这篇关于PyQt5 如何让界面和逻辑分离的方法的文章就介绍到这了,更多相关PyQt5 界面和逻辑分离内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
python getpass模块用法及实例详解
Oct 07 Python
用python求一重积分和二重积分的例子
Dec 06 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
Python可视化工具如何实现动态图表
Oct 23 Python
去除python中的字符串空格的简单方法
Dec 22 Python
Python3 中sorted() 函数的用法
Mar 24 #Python
python3 deque 双向队列创建与使用方法分析
Mar 24 #Python
pyqt5 QlistView列表显示的实现示例
Mar 24 #Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 #Python
PyQt5中向单元格添加控件的方法示例
Mar 24 #Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 #Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 #Python
You might like
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
辩论赛新闻稿
2015/07/17 职场文书