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实现远程调用MetaSploit的方法
Aug 22 Python
Python实现Linux下守护进程的编写方法
Aug 22 Python
python实现从web抓取文档的方法
Sep 26 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
python做接口测试的必要性
Nov 20 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
python实现扫雷小游戏
Apr 24 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 mvc开发模式的感想
2011/06/28 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python3 能振兴 Python的原因分析
2014/11/28 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python实现log日志的示例代码
2018/04/28 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
OpenCV 模板匹配
2019/07/10 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
商务考察邀请函范文
2014/01/21 职场文书
cf收人广告词
2014/03/14 职场文书
计算机网络专业求职信
2014/06/05 职场文书
公司离职证明标准样本
2014/10/05 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang