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程序代码片段
Jun 02 Python
Python3多线程爬虫实例讲解代码
Jan 05 Python
Python多进程原理与用法分析
Aug 21 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
详解python的argpare和click模块小结
Mar 31 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python中栈的原理及实现方法示例
Nov 27 Python
PyCharm如何导入python项目的方法
Feb 06 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
Jul 01 Python
Python之字符串的遍历的4种方式
Dec 08 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引用地址改变变量值的问题
2012/03/23 PHP
用 JSON 处理缓存
2007/04/27 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
js charAt的使用示例
2014/02/18 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
谈谈python中GUI的选择
2018/03/01 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
python实现弹窗祝福效果
2019/04/07 Python
python flask框架实现重定向功能示例
2019/07/02 Python
python中PyQuery库用法分享
2021/01/15 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
医学检验专业大学生求职信
2013/11/18 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
解除合同协议书
2014/04/17 职场文书
班级年度安全计划书
2014/05/01 职场文书
机关作风建设心得体会
2014/10/22 职场文书
限期整改通知书
2015/04/22 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技