Python下的图形界面GUI工具繁多,主要用PyQT来入手,其余还有内置的Tkinter,用这货要想设计稍微复杂点的界面简直太累了,而PyQT就是拖动图标
PyQT功能非常强大,可以用PyQt5做出漂亮的界面;另外它支持可视化界面设计,对新手非常友好。就是你可以通过拖动一些模块就可以完成一些代码才能完成的工作,就跟C++的QT是一样的。
1. 安装GUI库
首先需要安装模块PyQt5
pip install pyqt5
PyQt5不再提供QtDesigner等工具,需要再安装模块pyqt5-tools
pip install pyqt5-tools
这里提一下,使用pycharm一样可以安装三方库,在
pyCharm, Setting, Project, Python Interpreter, 中 + 新库,与pip的操作是一样的,但是其安装的库的目录与pip是不同的
Python Interpreter解释器,下图安装在pyCharm创建的工程目录下,venv/Lib/site-package,或者venv/Scripts
而pip命令安装的是在python的安装目录下,site-package
新建项目后,解释器默认选择该项目下的,可以改变路径使其恢复
2. 在Pycharm中配置PyQt5的开发环境
需要在Pycharm中配置PyQt5的开发环境,采用的是添加外部工具的方法来实现,需要添加两个外部工具,
一个是QtDesinger,用于界面设计
另一个是PyUIC,用于编译UI文件编程py文件
打开Pycharm,File,Settings,Tools,External Tools,点击 + 号,按照如下设置外部工具:
需要填写的说明:
Name:QtDesinger
Program:C:\Program Files\Python36\Lib\site-packages\PyQt5-tools\designer\designer.exe,这货在不同的版本,路径不同,如果是使用pyCharm安装的,那就存在于venv下,在通过文件查找找到其designer.exe精准目录,填进来
Working directory:$ProjectFileDir$
意思是该外部工具定义名称为QtDesinger,Working directory设置为当前项目工作目录即可,即创建的UI文件会存储在目录下。
Name:PyUIC
Program:C:\Program Files\Python36\Scripts\python.exe
Arguments:$FileName$ -o $FileNameWithoutExtension$.py
Working directory:$ProjectFileDir$
意思是该外部工具定义名称为PyUIC,Arguments的意思是会把UI文件转成同名的py文件,最后的Working directory设置为当前项目工作目录。
配置完成后,在Pycharm的Tools,External Tools,可以看到刚才配置工具名称,配置工具的目的是方便使用
3. Qt Designer基本控件介绍
主界面不同区域介绍:
工具箱 区域:提供GUI界面开发使用的各种基本控件,如单选框、文本框等。可以拖动到新创建的主程序界面。
主界面区域:用户放置各种从工具箱拖过来的各种控件。模板选项中最常用的就是Widget(通用窗口)和MainWindow(主窗口)。二者区别主要是Widget窗口不包含菜单栏、工具栏等。可以分别创建对比看看。
对象查看器 区域:查看主窗口放置的对象列表。
属性编辑器 区域: 提供对窗口、控件、布局的属性编辑功能。比如修改控件的显示文本、对象名、大小等。
信号/槽编辑器 区域:编辑控件的信号和槽函数,也可以添加自定义的信号和槽函数。
显示控件。
Lable:文本标签,显示文本,可以用来标记控件。
Text Browser:显示文本控件。用于后台命令执行结果显示。
输入控件,提供与用户输入交互
Line Edit:单行文本框,输入单行字符串。控件对象常用函数为Text() 返回文本框内容,用于获取输入。setText() 用于设置文本框显示。
Text Edit:多行文本框,输入多行字符串。控件 对象常用函数同Line Edit控件。
Combo Box:下拉框列表。用于输入指定枚举值。
控件按钮,供用户选择与执行
Push Button:命令按钮。常见的确认、取消、关闭等按钮就是这个控件。clicked信号一定要记住。clicked信号就是指鼠标左键按下然后释放时会发送信号,从而触发相应操作。
Radio Button:单选框按钮。
Check Box:多选框按钮。
了解基本控件及作用和获取输入/显示方法后,就可以开始动手实现小需求了。。比如登录界面。获取用户名和密码并显示。 打开Qt Designer,开始拖拽控件实现吧。。
Step1:打开主界面,选择Widget模板
Step2:从Widget Box工具箱中拖拽2个label、2个line Edit、2个Push Button以及1个Text Browser。拖完后如下:
Step3:双击各个控件,修改控件名称(对应属性编辑区中的text,可直接双击控件修改)以及对象名称(对应属性编辑区中的objectName)。对象名称一定记得修改。默认生成的label_1、label_2这种名称无法直接判断到底是对应哪个控件
Step4:点击File -Save保存实现结果。保存文件名为login.ui。
使用刚刚创建的工具,右键选择login.ui,外部工具Externel Tools中使用Pyuic,不出意外,我们会发现项目根目录多了一个和UI同名的py文件,但是这个文件并不能直接执行
4. 调用GUI
为了后续维护方便,采用界面与业务逻辑相分离来实现。也就是通过创建主程序调用界面文件方式实现。
这有2个好处。第1就是实现逻辑清晰。第2就是后续如果界面或者逻辑需要变更,好维护。新建call_login.py文件程序,调用login.py文件。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgetsimport QApplication, QMainWindow
#导入designer工具生成的login模块
from loginimport Ui_MainWindow
class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainForm,self).__init__(parent)
self.setupUi(self)
# 添加登录按钮信号和槽。注意display函数不加小括号()
self.pushButton_in.clicked.connect(self.display)
# 添加退出按钮信号和槽。调用close函数
self.pushButton_out.clicked.connect(self.close)
def display(self):
# 利用line Edit控件对象text()函数获取界面输入
username =self.lineEdit_username.text()
password =self.lineEdit_password.text()
# 利用text Browser控件对象setText()函数设置界面显示
self.textBrowser.setText("登录成功!\n" +"用户名是: " + username +",密码是: " + password)
if __name__ =="__main__":
#固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)
#初始化
myWin = MyMainForm()
#将窗口控件显示在屏幕上
myWin.show()
#程序运行,sys.exit方法确保程序完整退出。
sys.exit(app.exec_())
5.用pyinstaller 打包py文件成exe文件
可以为程序添加图标,使用ico文件
生成的文件在dist下面
pyinstaller -F -w --icon="C:\Users\Shawn\Project\HelloWorld\CarIco\Porsche.ico" event.py -w去控制台窗口的打包成exe