美文网首页
PyQt5入门系列4:模块化手动编写的代码块

PyQt5入门系列4:模块化手动编写的代码块

作者: 雷霆同学 | 来源:发表于2018-03-19 13:32 被阅读0次

    获取更多文章和更新,请关注我的个人主页:https://leiting6.cn

    为什么需要模块化?

    模块化编程是每门编程语言都需要使用到的技能,好处呢就是方便管理,便于理清思路。具体到本系列教程中简易计算器的设计,模块化的必要性又在哪呢?

    根据前面3篇文章的介绍,不出意外的话同学们也都能实现一个简单的加法器的功能了。我在自学PyQt5过程中,相当长一段时间里也都是按照这样的流程来编写代码的,甚至已经完成了几个小工具的设计。然而我自己也时常意识到自己会陷入一种窘境:只要想在QtCreator稍微改动一下UI界面,再利用pyuic5生成.py文件,就要重新再贴一遍自己添加的代码块,有首部import的、有中间自定义方法的、还有末尾的类外执行的...实在太麻烦了。

    大家可能还记得,在介绍使用QtCreator的时候我也说过,QtCreator设计出来的是一个类,而类是面向对象语言的重要概念之一,python也不例外。类能干嘛呢?能用来实例化对象、能继承、能改写。至此,同学们估计也已经意识到了,为什么我们要用模块 --- 没错,我们要把pyuic5生成的.py文件作为模块,而自己手动编写的代码放到主程序中,调用模块,继承、改写它!

    模块化操作

    修改UI界面,重新生成.py文件

    首先我们象征性的修改一下UI界面,假装是因为设计需要。如图,不增删控件的前提下,拖拽一下控件的位置、更改一下MainWindow的大小,效果如下:

    image.png

    然后再重新生成一下.py文件,为了不覆盖之前的main.py,我们这次重新取一个名字,让他看起来更像一个模块:

    pyuic5 -o ui_mainwindow.py mainwindow.ui
    

    加入以后还要加入其它的模块,可以取名字为ui_subwindow、ui_subwidget等等。

    打开ui_mainwindow.py发现和之前生成的main.py差不多。这一次我们就不改动它了,再同一个文件夹再新建一个空白的py文件,命名为calc.py。calc.py就是模块化之后的主程序文件。

    为calc.py添加代码,显示程序界面

    在calc.py中添加一下代码:

    from PyQt5 import QtCore, QtGui, QtWidgets
    import sys
    from ui_mainwindow import Ui_MainWindow as UIM
    
    if __name__ == "__main__":
       app = QtWidgets.QApplication(sys.argv)  
       MainWindow = QtWidgets.QMainWindow()    
       ui = UIM()                    
       ui.setupUi(MainWindow)                                        
       MainWindow.show()                       
       sys.exit(app.exec_())                   
    
    

    这段代码比较眼熟。没错,想要显示窗口,流程是没有变的,只是在calc.py中我们引入了ui_mainwindow包中的Ui_MainWindow类,重新命名为UIM,在下面的代码中,同样将UIM类实例化为ui,然后执行setupUi()方法,显示主窗口,等待退出。看不明白的需要补一下python基础知识。

    保存后在命令行中执行:

    python cacl.py
    

    可以看到:


    image.png
    改写Ui_MainWindow类

    好了,接下来需要添加之前已经作过说明的后台逻辑代码。为了能模块化管理这个小工程,而且不改动ui_mainwindow.py,上面我们已经在calc.py中引入了Ui_MainWindow类。根据之前的经验,原初的Ui_MainWindowbi并不能实现加法操作,我们还需要改写它。所以,在calc.py中,新建一个类继承并改写Ui_MainWindow,calc.py全部代码如下:

    from PyQt5 import QtCore, QtGui, QtWidgets
    import sys
    from ui_mainwindow import Ui_MainWindow as UIM
    
    class NewUiMainWindow(UIM):       
        def setupFunction(self):
            self.pushButton_calc.clicked.connect(self.get_sum)
            
        def get_sum(self):
            adder1 = self.lineEdit_Adder1.text()    # 获取第一个文本框中的内容存入adder1
            adder2 = self.lineEdit_Adder2.text()    # 获取第二个文本框中的内容存入adder2
            sum = int(adder1) + int(adder2)         # 将adder1和adder2强制转换为整形,计算出两数之和存入sum
            self.lineEdit_sum.setText(str(sum))     # 将sum强制转换为字符串,填入lineEdit_sum
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)  
        MainWindow = QtWidgets.QMainWindow()    
        ui = NewUiMainWindow() 
        ui.setupUi(MainWindow)
        ui.setupFunction()
        MainWindow.show()                       
        sys.exit(app.exec_())   
    

    执行calc.py简单测试一下功能,正常:

    image.png

    模块化之后,如果我们改动了.ui文件,尽管放心大胆地重新生成模块文件,只要不改动控件的名称,主程序都可以照常运行,是不是方便了很多?确实模块化的管理才是最科学的。

    写在最后

    这个系列的教程到此就结束了,后面会不定期补一些使用PyQt5的小技巧等等。欢迎大家留言,一起交流,一起进步。

    相关文章

      网友评论

          本文标题:PyQt5入门系列4:模块化手动编写的代码块

          本文链接:https://www.haomeiwen.com/subject/wlmeqftx.html