1:安装需要的第三方库(pyqt5,pyqt5-tools)
如果读者使用的anaconda,在安装完上述两个包之后会出现spyder打开不了的情况,本博客是基于纯python3(重装 的,自己的spyder也打不开了,还没整好)制作的GUI以及打包exe。
2:首先使用qt-designer,制作GUI界。
2.1新建 main window界面。在D:\py3\Lib\site-packages\PyQt5\Qt\bin下打开qt designer
制作以下界面(主要功能包括打开图片,保存,放大,缩小)
保存test.ui文件,在CMD中利用
转换成py文件
3:编写数据处理主要代码(data_process.py)
import gdal
import os
import numpy
import matplotlib.pyplot as plt
from PIL import Image,ImageGrab
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif']='SimHei'
class imageedit_process:
def read_img(path):
img= Image.open(path)
#plt.subplot(111),plt.imshow(img,'gray'),plt.title('origin_img')
#print(img)
#plt.show()
return img
def zoomin(path):#放大
img = Image.open(path) # 读取的图像显示的<matplotlib.image.AxesImage object at 0x7f9f0c60f7f0>
region = img.transpose(Image.ROTATE_180) #翻转
(x, y) = img.size
out = img.resize((x+1000, y+1000)) # 改变大小
plt.subplot(121),plt.imshow(img,'gray'),plt.title('原始影像')
plt.subplot(122),plt.imshow(out,'gray'),plt.title('放大影像')
plt.show()
def zoomout(path):#缩小
img = Image.open(path) # 读取的图像显示的<matplotlib.image.AxesImage object at 0x7f9f0c60f7f0>
(x, y) = img.size
out = img.resize((x-200, y-200)) # 改变大小
plt.subplot(121),plt.imshow(img,'gray'),plt.title('原始图像')
plt.subplot(122),plt.imshow(out,'gray'),plt.title('缩小影像')
plt.show()
4,运行代码(run_demo.py)
from PyQt5 import QtWidgets
from test2 import Ui_MainWindow
#from PyQt5.QtWidgets import QFileDialog
from data_process import imageedit_process
#from bottombutton import button_self
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__ (self):
super(mywindow, self).__init__()
self.setupUi(self)
self.actionopen.triggered.connect(self.read_file)#打开
self.actionsave.triggered.connect(self.save_file)#保存
self.actionzoom_in.triggered.connect(self.zoom_in)
self.actionzoom_out.triggered.connect(self.zoom_out)
def read_file(self):
#选取文件
filename, filetype =QFileDialog.getOpenFileName(self, "open file", "D:/imagetest", "All Files(*);;Text Files(*.png)")
print(filename, filetype)
self.lineEdit.setText(filename)
self.pic_show.setPixmap(QPixmap(filename))
#img=self.read_img(filename)
def save_file(self):
#获取文件路径
# 用全局变量保存所有需要保存的变量在内存中的值。
file_name = QFileDialog.getSaveFileName(self,"文件保存","D:/imagetest/save","All Files (*);;Text Files (*.png)")
print(file_name[0])
btn=button_self()
btn.file_save(file_path,file_name[0])
#imageedit_process.read_img(filename)
def zoom_in(self):
file_path = self.lineEdit.text()
if file_path=='':
self.showMessageBox()
else:
imageedit_process.zoomin(file_path)
def zoom_out(self):
file_path = self.lineEdit.text()
if file_path=='':
self.showMessageBox()
else:
imageedit_process.zoomout(file_path)
def showMessageBox(self):
res_3 = QMessageBox.warning(self, "警告", "请选择文件,再执行该操作!", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
ui = mywindow()
ui.show()
sys.exit(app.exec_())
效果图如下:
5;使用pyinstaller打包成exe文件
#!/usr/bin/env python3
# -\- coding: utf-8 -\-
from PyInstaller.__main__ import run
import os
# -F:打包成一个EXE文件
# -w:不带console输出控制台,window窗体格式
# --paths:依赖包路径
# --icon:图标
# --noupx:不用upx压缩
# --clean:清理掉临时文件
if __name__ == '__main__':
opts = ['-F', '-w', '--paths=D:\py3\Lib\site-packages\PyQt5\Qt\bin',
'--paths=D:\py3\Lib\site-packages\PyQt5\Qt\plugins',
'--noupx', '--clean',
r'F:\s2_download\qt5manager-master\test2\run_demo.py']
run(opts)
其中run_demo.py是运行的文件新生成一个dist文件夹,生成一个exe文件。
详细代码及界面设置详见https://download.csdn.net/download/qq_33657870/12324201**(不要积分)**
test2.ui为qt designer中设计的界面
test2.py为ui转成的py文件
data_process为数据处理的代码(现在和界面无关)
run_demo为运行的代码将数据处理功能和界面关联
py2exe为代码打包成exe文件