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 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
Python中property属性实例解析
Feb 10 Python
python数据封装json格式数据
Mar 04 Python
python放大图片和画方格实现算法
Mar 30 Python
python 生成图形验证码的方法示例
Nov 11 Python
python3实现猜数字游戏
Dec 07 Python
python读写配置文件操作示例
Jul 03 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
python如何代码集体右移
Jul 20 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 自定义错误日志实例详解
2016/11/12 PHP
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
Python struct模块解析
2014/06/12 Python
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python圣诞树编写实例详解
2020/02/13 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
软件测试面试题
2015/10/21 面试题
财务会计专业求职信范文
2013/12/31 职场文书
《太阳》教学反思
2014/02/21 职场文书
师范生求职信
2014/06/14 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
实习单位推荐信
2015/03/27 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python