有一天,我在思量自己所写的一些代码的时候,突然一阵阵躁动,为什么呢?本人非计算机科班出身,看到一行一行的代码,就像一条一条小虫子,让我觉得,这些代码好杂乱啊。还有就是,随着代码越写越多,编码能力在不断培养。之前写的代码,在之后用到的时候,老想着去优化、更新写法。所以,我在想,有没有办法,让我把代码给包装起来。之后再用到的时候,就直接一个界面化的东西,让我填空得结果就好了,看着既美观,使用的时候又不用考虑到内部的算法。
另一方面,我是做遥感影像处理的,一些相关处理的算法被集成在一些例如ENVI、ARCGIS这种的软件当中,这些软件固然好用。但是由于集成了太多的算法,他们使用起来可能会比较笨重。如果可以把一些经常用到的算法,组合在一起,写成自己的小软件,那么就可以实现轻量级的应用,平常处理到什么的时候,就会轻松方便的多。
emmmm…基本想法就是这样
我们会用到,Python3、Pycharm、PyQt5包、QTdesinger相关内容
具体配置教程是参考了: pycharm+PyQt5+python最新开发环境配置
1、首先安装Pycharm(我是用的PyCharm 2018.1.4)
2、新建一个空的python工程,找到setting安装第三方模块PyQT5,点加号,先安PyQT5,再安装pyqt5-tools,后面包含qtdesinger
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,后面这个可以和我一样
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,后面这个可以和我一样
6、添加pyrcc的参数,这个是将资源文件如图片等转成python代码能识别的文件,这个参数基本和pyuic5的是一样的
7、以上参数配置完成PYQT5也可以说是基本完成了,如果你是顺利基本可以装B了
8、直接打开qtdesinger,创建一个主窗口文件,创建完成后,另存为.ui文件。如果能够顺利保存为.ui文件的话,那么恭喜你,整个环境配置已经完成。可以开始进行GUI的开发了。
我们的目的是,创建一个小的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)
PYQT5与QTdesinger的学习资源,可以自行查找,PYQT是QT的继承,网上资料也很多
在pycharm右键这个.ui文件>选择扩展工具>选择pyuic5 , 就会依据这个.ui文件,生成一个.py文件
主要是把转化好的主窗口.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_())
一套信号与槽对应一个响应
就是在主窗口程序(ceshi.py)中设置每个GUI窗口中每个元素的’动作’,就是信号的来源,比如ok这个建,当点击他的时候,我们希望能获取name和age对应输入文本框内的字符或者数值,然后再对应导入算法程序(suanfa.py)中,随后在状态栏(每日一笑)展示算法程序生成的结果。
所以,也就是说,一个ok按钮,对应的信号,连接了name、age文本框,和每日一笑大文本框
点击它就是传递信号,对应的动作就是槽函数中的算法
self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(MainWindow.p1_ck) # 点击第一个按钮的名称定义为p1_ck
QtCore.QMetaObject.connectSlotsByName(MainWindow)
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 (*)")
# #彩蛋:获取文件夹路径
打包工具使用的是python的一个轻量级的包——pyinstaller,可以做成一个exe程序:
具体,请详见: Python制作一个简单的GUI-【下篇】 ——GUI打包成exe