009. (4.9) GUI--Pyqt5入门学习

参考文章:
python gui 中三大框架tkinter,wxpython, pyqt
PyQt5(designer)入门指引
PyQt5教程 - QtDesigner窗口设计工具的使用

PyQt5简介

pyqt5是一套Python绑定Digia QT5应用的框架。Qt库是最强大的GUI库之一。

pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法。这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS。pyqt5是双重许可。开发者可以在GPL和商业许可之间进行选择。比起Tkinter的UI布局全靠代码实现,只有15种常用部件,显示效果简陋,PyQt5更有优势。

初识Qt Designer

通常来说,编写GUI有两种方法: 第一种就是直接使用方便快捷的Qt Designer。 第二种就是写代码。在有Qt Designer的情况下,是完全不推荐费时费力手写GUI代码的。

Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果。此外,它还实现了视图和逻辑的分离。

Qt Designer可以所见即所得,并且可以方便的修改并做出各种调整,另外我们也可以通过它生成的代码来学习一些窗口控件的用法。

当然,要做出华丽的界面还是要学代码的。

生成Python代码

使用cmd将目录切到文件所在目录并执行下面的命令。请自行将下面命令中的name替换成文件名

pyuic5 -o name.py name.ui

此时尝试运行刚刚生成的“HelloWorld.py”是没用的,因为生成的文件并没有程序入口。(缺少主程序部分)**因此我们在同一个目录下另外创建一个程序叫做“main.py”,并输入如下内容。在本例中,gui_file_name就是HelloWorld,请自行替换。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

import gui_file_name

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = gui_file_name.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

然后运行“main.py”,就能看到刚编写的GUI了。

交互
  • 1 获取button的 “ID”
    “Property Editor”中可以得知一个个按钮的“objectName”

  • 2 设置触发
    回到另外创建的主程序py中,增添代码。
    在“main.py”中“MainWindow.show()”的后面加入下面这样的一行代码:

    ui.pushButton.clicked.connect(click_success)
    

    解释下:

  • pushButton就是刚刚获取的按钮id

  • clicked就是信号,因为是点击,所以我们这里用clicked

  • click_success就是对应要调用的注意这里函数并不写成click_success() !!!

  • 既然刚刚设置了button触发并绑定了一个函数click_success,就要在“main.py”中实现它:

    def click_success():
    	print("成功!")
    

    搞定。
    从上可以了解到,QT designer设计UI,保存为ui文件ui文件生成对应代码xx.py,但我们用另创建的main.py来执行程序UI跟逻辑分离的好处就在这里,我们这次不用去管“HelloWorld.py”了,直接运行修改完的“main.py”。

传参 (实例:单向汇率转换器)
  • 注意,GUI的main程序编写时,不能通过正常的方式进行传参。 对于传参,有两种解决方案,一种是使用lambda,还有一种是使用functool.partial。在接下来的环节中我们会使用partial:
 	partial(function, arg1, arg2, ......)

要在程序(main.py)的头部加上下面这行:

 from functools import partial

把之前按钮触发一行的代码修改为:

ui.pushButton.clicked.connect(partial(convert, ui))
  • 编写convert函数(我将其视为逻辑部分)
def convert(ui):
    input = ui.lineEdit.text()## lineEdit为输入框的对象名,再用text()方法
    result = float(input) * 6.7
    ui.lineEdit_2.setText(str(result))## setText()并转换为str

对GUI应用于原有程序的些许思考

首先要明确的是面向对象编程,类要有,一个个类中的函数也要分明。这样便于代码编写、整理、浏览。

那么如何在原有代码基础上用GUI呈现程序呢?

这里似乎又要借鉴平时使用APP的经历。当我们使用APP时,总是在一个又一个图形窗口中进行选择,按下button、输入(搜索)以及进行其他图形界面的交互时,程序便开始执行对应内容。

所以现在的初步想法是 在有关图形界面交互的函数中 嵌套 原有程序的对应执行函数,但等具体操作时才能确认这种做法是否合理。

小结

今天算是小休息,因为对GUI抱有好奇心,便想了解相关知识。QT designer的确方便强大,还能对ui文件自动生成代码,而且外观也挺标致。UI与逻辑分离是Pyqt5的一大特色,逻辑部分的编写还需在实操中不断学习和熟悉。

猜你喜欢

转载自blog.csdn.net/u013598957/article/details/105407418
4.9