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实现的登录和操作开心网脚本分享
Jul 09 Python
python fabric使用笔记
May 09 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
Python线程下使用锁的技巧分享
Sep 13 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
python3中TQDM库安装及使用详解
Nov 18 Python
七个Python必备的GUI库
Apr 27 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
vue+iview+less 实现换肤功能
2018/08/17 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
python字典基本操作实例分析
2015/07/11 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
python 实现线程之间的通信示例
2020/02/14 Python
django API 中接口的互相调用实例
2020/04/01 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
接待员岗位责任制
2014/02/10 职场文书
母亲节演讲稿
2014/05/27 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
产品调价通知函
2015/04/20 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
对象析构函数__del__在Python中何时使用
2022/03/22 Python
frg-100简单操作(设置)说明
2022/04/05 无线电