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中针对函数处理的特殊方法
Mar 06 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
Django日志模块logging的配置详解
Feb 14 Python
python获取url的返回信息方法
Dec 17 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
使用tensorflow 实现反向传播求导
May 26 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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
Drupal简体中文语言包安装教程
2014/09/27 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python实现微信自动回复功能
2018/04/11 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
numpy.random模块用法总结
2019/05/27 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
django 模版关闭转义方式
2020/05/14 Python
python适合做数据挖掘吗
2020/06/16 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Python实现播放和录制声音的功能
2020/08/12 Python
一文读懂Python 枚举
2020/08/25 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
财务部岗位职责
2013/11/19 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
python - timeit 时间模块
2021/04/06 Python