PyQt5系列教程(七)界面和逻辑分离

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/djstavaV/article/details/88784313

原文出处: https://blog.xugaoxiang.com/python/pyqt5-ui-logic.html

软硬件环境

  • windows 10 64bit
  • Miniconda with python 3.7.1
  • PyQt5
  • PyCharm

前言

前面的内容我们介绍了利用QtDesigner来设计界面,再通过批处理脚本pyuic5.batui文件转换成python源文件。不过由于要响应事件操作,往往会将相应的槽函数写在uipy文件里(前面的示例就是这样),这样,界面和逻辑的开发代码就混合在一起了,每一次的ui的更新都会伴随着转换后py文件的修改,想想就知道很不合理了。对于多人协作的项目,这样的效率肯定是低下的。有鉴于此,本文就来介绍如何将这二者进行剥离。

实例讲解

设计ui

首先用QtDesigner做一个简单的界面mainwindow.ui, 在菜单栏上加入几个QAction

ui转换成py

利用pyuic5.bat进行转换

pyuic5.bat -o ui_mainwindow.py mainwindow.ui

剥离ui和逻辑

新建一个mainwindow.py文件,创建MainWindow


from PyQt5.QtWidgets import QMainWindow
from ui_mainwindow import Ui_MainWindow


class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.action_exit.triggered.connect(self.onExitTriggered)

        self.action_copy.triggered.connect(self.onCopyTriggered)
        self.action_paste.triggered.connect(self.onPasteTriggered)
        self.action_cut.triggered.connect(self.onCutTriggered)

在这里去绑定相应的signalslot,实现具体的业务逻辑,代码结构也清晰多了。这样,以后如果再遇到ui更新了,我们只需要将更新后的ui文件替换,再转换成py就可以了,实现了ui和逻辑的分离。

main函数中调用

main中实例化MainWindow,调用show方法显示


import sys

from PyQt5.QtWidgets import QApplication

from mainwindow import MainWindow

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

备注

为了便于保存记录,在Github创建了一个工程,地址是: https://github.com/xugaoxiang/learningPyQt5,后续会把所有的代码、文档以及博文链接都放在上面。

展开阅读全文

[franklyTalk] 从界面逻辑分离开始

09-14

最初的一个讨论的帖子是rnhttp://community.csdn.net/Expert/topic/4249/4249906.xml?temp=.3769953rn在这个帖子中lvhaiyan (寒雪)提出了这样一个问题:rn请大家谈谈多人vc程序,界面、代码怎么分工,以及,每人写的代码怎么集中到一个程序中去,请大家积极讨论,希望对大家都有好处。rnrn这个问题说容易也很容易,说难也非常难。这里面不仅仅是一个编码或是分工的问题,更是一种深层次的思想问题。可能说的玄乎了,开个新贴我对那个帖子的再说说自己的一些体会,更是一个新的讨论的开始。rnrn从正式开始学C++到现在也有三四年的时间了,我回过头来看一下走过的轨迹,从C++语言本身到Windows系统到MFC到STL,boost,loki这些类库再是模板类还有COM,大概也就这些内容,C++ Primer,Advanced Windows,深入浅出MFC那些书还不时的会去翻翻看看,是这三本书带领我走进了编程的世界。rnrn其实在初学那段时间极端热衷在csdn.net中VC/C++中回帖,那个时候觉得牛啊,全T.M.D是星星,我也是孜孜不倦看贴回帖,不断游走与vckbase,codeproject,codeguru,慢慢的自己的专家分也到了5位数,那个时候的兴奋啊,但现在回过头来想想,真的没什么,都是一些重复性的劳动,自己并没有在这种回帖中有更大的发展空间了,所以也就慢慢的退了出来。rnrn我相信很多用VC的人的都觉得VC是目前最牛X的工具,C++是世界上最流行的语言。会MFC就可以开发出一流的软件。所以不屑于java,不屑于ruby,python,perl那些不上台面的动态脚本语言,更是对smalltalk不值一提。更是盲目的把会使MFC等同于理解面向对象思想。以为开发出来的程序都是面向对象的。rnrn举个实际的例子来说,我看到很多人都把程序的起始点定位在CView::OnInitialUpdate()或是CDialog::OnInitDialog()中,看到太多了以致我很长一段时间以为逻辑的初始化就是应该放在这里的,等我后来回过头来才知道自己是多么的无知,无知者无畏吧!rnrn从这几年来看,整个中国C++社群[外国的我不清楚,至少CSDN是这样]太关注于语言本身以及一些技术性层次上的问题,被这些给框死了,太多的注意力停留在MFC上了,这个从csdn上VC/MFC的分类也可以看得出rn基础类 | 非技术类 | 界面 | 网络编程 | 进程/线程/DLL | ATL/ActiveX/COM | 数据库 | HTML/XML | 图形处理/算法rn典型的技术型体系,XML这么重要的技术在这个csdn/VC中也体现不出来,发贴回帖的数量少的可怜。rnrn很多现在的问题和几年前的问题还是停留在同一个层次上,相信很多星星级的都会有很大的体会。rn我可以很肯定的说,VC/MFC已经落后了,VC/MFC到底该何去何从这是每一个做VC/MFC都应该思考的一个问题。我们不应该再有那种C++/MFC式的优越感,更多的应该是一种危机感,迫切感。rnrn我相信如果一个热爱java的人来说c++/mfc是怎么怎么烂,我会鄙视他,不理睬他,摆出一副很不屑的态度,然后开始攻击java怎么怎么,效率怎么怎么,但我想我是十分热爱c++/mfc的,我希望和大家坐下来谈谈自己的对vc/mfc的一些想法,对自己的一些展望。不是说说一定要怎么怎么样,就当是朋友聊聊天罢了。rnrnCsdn是伴随我成长起来的地方,从中学到很多知识,结识了很多朋友,人是有感情的,真希望大家都能团结起来,群策群力,从网上到网下,从陌生人到朋友,也许只是一个美好的vision。rnrn未完待续rn 论坛

没有更多推荐了,返回首页