pyCharm+qtDesigner+pyinstaller 生成exe窗体GUI程序

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容