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之有容乃大的list(4)
Sep 28 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python程序退出方式小结
Dec 09 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
详解tensorflow之过拟合问题实战
Nov 01 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获取网页请求状态程序示例
2014/06/17 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
一看就懂得Python的math模块
2018/10/21 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
商务主管岗位职责
2013/12/08 职场文书
团支部推优材料
2014/05/21 职场文书
大学同学会活动方案
2014/08/20 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
市级三好学生评语
2014/12/29 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python