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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
python获取本机外网ip的方法
Apr 15 Python
Python获取系统默认字符编码的方法
Jun 04 Python
Python中基础的socket编程实战攻略
Jun 01 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
使用Selenium破解新浪微博的四宫格验证码
Oct 19 Python
python机器学习库xgboost的使用
Jan 20 Python
Python更新所有已安装包的操作
Feb 13 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
python 高阶函数简单介绍
Feb 19 Python
django使用多个数据库的方法实例
Mar 04 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
改变Apache端口等配置修改方法
2008/06/05 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
python switch 实现多分支选择功能
2020/12/21 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
个人更名证明
2015/06/23 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
数学复习课教学反思
2016/02/18 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python