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的类变量和成员变量用法实例教程
Aug 25 Python
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 Python
python中assert用法实例分析
Apr 30 Python
Python中list初始化方法示例
Sep 18 Python
python实现媒体播放器功能
Feb 11 Python
pandas实现选取特定索引的行
Apr 20 Python
Python3中的json模块使用详解
May 05 Python
Python实现某论坛自动签到功能
Aug 20 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
Python3 assert断言实现原理解析
Mar 02 Python
python中subplot大小的设置步骤
Jun 28 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去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
Javascript实现单例模式
2016/01/24 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
js实现简单点赞操作
2020/03/17 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python基于回溯法解决01背包问题实例
2017/12/06 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python数据类型之List列表实例详解
2019/05/08 Python
python实现批处理文件
2020/07/28 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
网上快餐厅创业计划书
2014/02/01 职场文书
2014年协会工作总结
2014/11/22 职场文书