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 04 Python
详解Python的Django框架中的通用视图
May 04 Python
Python中Random和Math模块学习笔记
May 18 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python实现最长公共子序列
May 22 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
python 通过文件夹导入包的操作
Jun 01 Python
python能在浏览器能运行吗
Jun 17 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python爬取youtube视频的示例代码
Mar 03 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 MemCached高级缓存配置图文教程
2010/08/05 PHP
php导出word格式数据的代码实例
2013/11/25 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
解决Python安装cryptography报错问题
2020/09/03 Python
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
入党介绍人评语
2014/05/06 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年共青团工作总结
2014/12/10 职场文书
青岛导游词
2015/02/12 职场文书
世界遗产导游词
2015/02/13 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书