2022年 11月 9日

Python制作一个简单的GUI-【上篇】

Python做简单GUI

  • 1 学习初衷
  • 2 配置环境
    • 2.1 所用工具说明
    • 2.2 配置步骤
  • 3 创建一个简单的GUI小程序
    • 3.1 写一个简单的小算法(.py文件)
    • 3.2 GUI界面的制作
      • 3.21 一个简单的GUI
      • 3.22 .ui转为.py文件
      • 3.23 在pycharm中展示自己创建的GUI界面
      • 3.24 建立信号与槽(响应)
        • 3.241 建立信号(主窗口程序)
        • 3.242 建立槽函数(主函数程序)
        • 3.243 测试
  • 4 pyinstaller打包成exe

1 学习初衷

 有一天,我在思量自己所写的一些代码的时候,突然一阵阵躁动,为什么呢?本人非计算机科班出身,看到一行一行的代码,就像一条一条小虫子,让我觉得,这些代码好杂乱啊。还有就是,随着代码越写越多,编码能力在不断培养。之前写的代码,在之后用到的时候,老想着去优化、更新写法。所以,我在想,有没有办法,让我把代码给包装起来。之后再用到的时候,就直接一个界面化的东西,让我填空得结果就好了,看着既美观,使用的时候又不用考虑到内部的算法。
 另一方面,我是做遥感影像处理的,一些相关处理的算法被集成在一些例如ENVI、ARCGIS这种的软件当中,这些软件固然好用。但是由于集成了太多的算法,他们使用起来可能会比较笨重。如果可以把一些经常用到的算法,组合在一起,写成自己的小软件,那么就可以实现轻量级的应用,平常处理到什么的时候,就会轻松方便的多。
 emmmm…基本想法就是这样

2 配置环境

2.1 所用工具说明

 我们会用到,Python3、Pycharm、PyQt5包、QTdesinger相关内容
 具体配置教程是参考了: pycharm+PyQt5+python最新开发环境配置

2.2 配置步骤

1、首先安装Pycharm(我是用的PyCharm 2018.1.4)
2、新建一个空的python工程,找到setting安装第三方模块PyQT5,点加号,先安PyQT5,再安装pyqt5-tools,后面包含qtdesinger
IDE中下载PyQT5第三方库
下载库
3、以上模块都安完,设置扩展工具的参数找到setting->tools->external tools,点击加号新建工具
添加额外工具
4、添加qtdesinger的参数,program:C:\Program Files (x86)\Python36-32\Lib\site-packages\pyqt5_tools\designer.exe,这个是我的需要换成你自己的,arguments:

F

i

l

e

D

i

r

FileDir

FileDir$FileName$ ,working directory:

F

i

l

e

D

i

r

FileDir

FileDir,后面这个可以和我一样
配置额外工具QTdesinger
5、添加pyuic5的参数,这个是把qt的UI文件转换成.py文件的工具,program:C:\Program Files (x86)\Python36-32\Scripts\pyuic5.exe,这个也需要改成你自己的,
arguments:

F

i

l

e

N

a

m

e

FileName

FileName -o

F

i

l

e

N

a

m

e

W

i

t

h

o

u

t

E

x

t

e

n

s

i

o

n

FileNameWithoutExtension

FileNameWithoutExtension.py ,working directory:

F

i

l

e

D

i

r

FileDir

FileDir,后面这个可以和我一样
pyuic5的参数
6、添加pyrcc的参数,这个是将资源文件如图片等转成python代码能识别的文件,这个参数基本和pyuic5的是一样的
pyrcc参数配置
7、以上参数配置完成PYQT5也可以说是基本完成了,如果你是顺利基本可以装B了
成功配置好了环境!
8、直接打开qtdesinger,创建一个主窗口文件,创建完成后,另存为.ui文件。如果能够顺利保存为.ui文件的话,那么恭喜你,整个环境配置已经完成。可以开始进行GUI的开发了。
在这里插入图片描述
成功使用QTdesigner编辑GUI界面

3 创建一个简单的GUI小程序

3.1 写一个简单的小算法(.py文件)

我们的目的是,创建一个小的GUI,当我们在输入框填入某个人姓名和年龄的时候,会在显示栏出现一段调侃的话
在这里插入图片描述

# *-*encoding:utf-8
"""
    一个简单的字符串拼接,目的是为了测试制作GUI
"""


def get_info(name, age):
    # 励志ing...
    a = '  遥想公瑾当年,小乔初嫁了,羽扇纶巾,雄姿英发...'
    zhouyu_age = 23
    count = zhouyu_age-age
    if count > 0:
        count = str(count)
        b = "  '{}',公元198年,孙策周瑜当时都是23岁,都建功立业了,你只比他小{}岁,加油啊,少年,还有机会!".format(name, count)
    else:
        count = str(count)
        b = "  '{}',公元198年,孙策周瑜当时都是23岁,都建功立业了,你比人家还大{}岁,要加把劲啊".format(name, count)
    c = a+'\n\n'+b+'\n\n'
    return c


c = get_info('哈哈',13)
print(c)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3.2 GUI界面的制作

 PYQT5与QTdesinger的学习资源,可以自行查找,PYQT是QT的继承,网上资料也很多

3.21 一个简单的GUI

在这里插入图片描述

3.22 .ui转为.py文件

在pycharm右键这个.ui文件>选择扩展工具>选择pyuic5 , 就会依据这个.ui文件,生成一个.py文件
在这里插入图片描述

3.23 在pycharm中展示自己创建的GUI界面

主要是把转化好的主窗口.py(ceshi.py)展示出来
为此,新建一个主程序.py(main.py)
在这里插入图片描述

# *-*encoding:utf-8
import sys
import ceshi
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QFileDialog


class Mywindow(QtWidgets.QMainWindow,ceshi.Ui_MainWindow):
    def __init__(self,parent = None):
        # super(Mywindow, self).__init__()
        QtWidgets.QMainWindow.__init__(self,parent)
        self.setupUi(self)

# MAIN
app = QtWidgets.QApplication(sys.argv)
window = Mywindow()
window.resize(700, 600)
window.show()
sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.24 建立信号与槽(响应)

 一套信号与槽对应一个响应
 就是在主窗口程序(ceshi.py)中设置每个GUI窗口中每个元素的’动作’,就是信号的来源,比如ok这个建,当点击他的时候,我们希望能获取name和age对应输入文本框内的字符或者数值,然后再对应导入算法程序(suanfa.py)中,随后在状态栏(每日一笑)展示算法程序生成的结果。
 所以,也就是说,一个ok按钮,对应的信号,连接了name、age文本框,和每日一笑大文本框
 点击它就是传递信号,对应的动作就是槽函数中的算法

3.241 建立信号(主窗口程序)

按钮一的信号
在这里插入图片描述

		self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(MainWindow.p1_ck)  # 点击第一个按钮的名称定义为p1_ck
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
  • 1
  • 2
  • 3

3.242 建立槽函数(主函数程序)

对应槽函数
在这里插入图片描述

    def p1_ck(self):
        self.name = self.lineEdit.text()
        self.age = self.lineEdit_2.text()
        self.age = int(self.age)
        c = get_info(self.name,self.age)
        self.textBrowser.append(c)

        # self.location = QFileDialog.getOpenFileName(self,'Open tif:','./',"Tif Files (*.tif);;All Files (*)")
        # #彩蛋:获取文件夹路径
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.243 测试

 成功完成GUI的制作
在这里插入图片描述

4 pyinstaller打包成exe

打包工具使用的是python的一个轻量级的包——pyinstaller,可以做成一个exe程序:
在这里插入图片描述
具体,请详见: Python制作一个简单的GUI-【下篇】 ——GUI打包成exe