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 13 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
python实现爬山算法的思路详解
Apr 09 Python
python 实现aes256加密
Nov 27 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
python中的plt.cm.Paired用法说明
May 31 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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去除字符串中空字符的常用方法小结
2015/03/17 PHP
浅谈php7的重大新特性
2015/10/23 PHP
关于this和self的使用说明
2010/08/01 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
vue-loader教程介绍
2017/06/14 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
企划经理的岗位职责
2013/11/17 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
3的组成教学反思
2014/04/30 职场文书
警示教育片观后感
2015/06/17 职场文书
名人传读书笔记
2015/06/26 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python