毕设要做个系统界面,选择了简单易操作的Pyqt5,把近日了解的有关知识分享给大家,也给自己的学习做个记录!!!
正式开始介绍啦!!!
首先下载Qtdeigner
下载网址https://build-system.fman.io/qt-designer-download
按照自己的版本选择安装哟!!!
安装完成,打开是这个样子的。
界面创建
可以选择Main Window和Widget进行创建,那他们的区别在哪里呢。下面我们仔细看看。
图一是Main Window 创建,图二是Widget创建的。
图一
图二
如图三所示我们可以看到Main Window多了Type Here(菜单栏)。其他没有什么区别。
图三
一切从简,我选择了Widget来进行创建。
拖拉组件构成界面
在这个软件中,我们可以通过直接拖拉小组件的方式来构成我们的界面。
那我们先来认识这些组件吧!!!
下面的博客介绍的很全面哦!!!大家可以去看看!!!
参考博客(182条消息) QTDesigner常用组件及方法_Hi~晴天大圣的博客-CSDN博客
UI文件转化成python文件方法
我们打开cmd,进入UI文件的目录。下图是我的文件下的ui文件,名称是translate.ui,我想将它转化成translate_1.py
代码如下:
pyuic5 -o translate_1.py transalte.ui
格式 pyuic5 -o xxx.py xxx.ui,打住先别操作!!!
但是这样生成的py文件运行之后不会有窗口出现,我们需要加入-x
pyuic5 -o translate_1.py transalte.ui -x
格式 pyuic5 -o xxx.py xxx.ui -x
这样就会由我们想要的文件生成啦!!!
我的translate_1.py文件生成啦!!!
接下来的任务就是小组件实现相应的功能啦!!!
首先展示一下我的界面设计
我的界面由7个按钮,四个文本框。我们来讲讲他们的实现。(除了图像着色和图像增强哟,设计其他算法太多,有些杂乱)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "图像修复"))
self.pushButton_4.setText(_translate("Form", "请选择图片"))
self.textBrowser_4.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.pushButton_6.setText(_translate("Form", "图像增强"))
self.pushButton_7.setText(_translate("Form", "图像着色"))
self.pushButton_8.setText(_translate("Form", "展示原图"))
self.label.setText(_translate("Form", "<html><head/><body><p align=\"center\"><span style=\" font-size:18pt; font-weight:600; color:#55007f;\">图像修复界面</span></p></body></html>"))
self.pushButton_9.setText(_translate("Form", "图像保存"))
self.pushButton_10.setText(_translate("Form", "图像保存"))
self.pushButton.setText(_translate("Form", "退出系统"))
# self.label_2.setText(_translate("Form", "渲染因子"))
》》》请选择文件按钮--pushButton4
功能:在所在磁盘选择任意图片,并且将图片路径写入textBrowser_4中显示出来。
首先按钮触发dir函数
self.pushButton_4.clicked.connect(self.dir)
然后自定义函数dir
def dir(self):
#imgName imgType文件路径、文件类型
imgName, imgType = QFileDialog.getOpenFileName(None, "打开图片", "", "*.jpg;;*.png;;All Files(*)")
#将图片路径显示到textBrowser中
self.textBrowser_4.setText(imgName)
return imgName
》》》展示原图--pushButton8
功能:根据textBrowser_4中的路径,将选择的图片显示在
首先按钮触发openimage函数
self.pushButton_8.clicked.connect(self.openimage)
然后自定义函数oprnimage
def openimage(self):
#获取图片路径
imgName=self.textBrowser_4.toPlainText()
#调整图片的大小
image = QImage(imgName).scaled(self.textEdit.width(), self.textEdit.height())
#图片显示在textEdit中
cursor = self.textEdit.textCursor()
document = self.textEdit.document()
document.addResource(QTextDocument.ImageResource, QUrl("image"), image)
cursor.insertImage("image")
》》》图像保存--pushButton4
功能:保存修复的图片到磁盘任意的位置,是根据文件的路径不是从textEdit中获取的哟(偷懒)
首先按钮触发save_event_color函数
self.pushButton_9.clicked.connect(self.save_event_color)
然后自定义函数save_event_color
def save_event_color(self):
# _translate = QtCore.QCoreApplication.translate
imgName, imgType = QFileDialog.getSaveFileName(None, "保存图片", "", "*.jpg;;*.png;;All Files(*)")
# 打印保存文件的全部路径(包括文件名和后缀名)
with Image.open('result_images/1.png') as img:
# 将图像保存到新文件
img.save(imgName)
》》》退出系统--pushButton
功能:退出图像修复系统
首先按钮触发Closewindowr函数
self.pushButton.clicked.connect(self.Closewindow)
然后自定义函数save_event_color
def Closewindow(self):
self.close()
总体代码如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'pr.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
# from run import main
# from PyQt5 import QtCore, QtGui, QtWidgets
# from cProfile import run
from asyncio.windows_events import NULL
from PIL import Image
import sys
# import run
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QPixmap
import os
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(909, 546)
self.pushButton_4 = QtWidgets.QPushButton(Form)
self.pushButton_4.setGeometry(QtCore.QRect(56, 101, 221, 40))
self.pushButton_4.setObjectName("pushButton_4")
self.textBrowser_4 = QtWidgets.QTextBrowser(Form)
self.textBrowser_4.setGeometry(QtCore.QRect(286, 101, 611, 40))
self.textBrowser_4.setObjectName("textBrowser_4")
self.pushButton_6 = QtWidgets.QPushButton(Form)
self.pushButton_6.setGeometry(QtCore.QRect(630, 450, 101, 41))
self.pushButton_6.setObjectName("pushButton_6")
self.pushButton_7 = QtWidgets.QPushButton(Form)
self.pushButton_7.setGeometry(QtCore.QRect(350, 450, 101, 41))
self.pushButton_7.setObjectName("pushButton_7")
self.pushButton_8 = QtWidgets.QPushButton(Form)
self.pushButton_8.setGeometry(QtCore.QRect(80, 452, 181, 41))
self.pushButton_8.setObjectName("pushButton_8")
self.line = QtWidgets.QFrame(Form)
self.line.setGeometry(QtCore.QRect(27, 165, 871, 20))
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(Form)
self.line_2.setGeometry(QtCore.QRect(19, 176, 20, 331))
self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.line_3 = QtWidgets.QFrame(Form)
self.line_3.setGeometry(QtCore.QRect(310, 172, 20, 331))
self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_3.setObjectName("line_3")
self.line_4 = QtWidgets.QFrame(Form)
self.line_4.setGeometry(QtCore.QRect(590, 172, 20, 331))
self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_4.setObjectName("line_4")
self.line_5 = QtWidgets.QFrame(Form)
self.line_5.setGeometry(QtCore.QRect(890, 173, 20, 331))
self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_5.setObjectName("line_5")
self.line_6 = QtWidgets.QFrame(Form)
self.line_6.setGeometry(QtCore.QRect(30, 492, 871, 20))
self.line_6.setFrameShape(QtWidgets.QFrame.HLine)
self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_6.setObjectName("line_6")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(350, 30, 271, 51))
self.label.setTextFormat(QtCore.Qt.AutoText)
self.label.setObjectName("label")
self.textEdit = QtWidgets.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(43, 203, 261, 221))
self.textEdit.setObjectName("textEdit")
self.textEdit_2 = QtWidgets.QTextEdit(Form)
self.textEdit_2.setGeometry(QtCore.QRect(330, 200, 261, 221))
self.textEdit_2.setObjectName("textEdit_2")
self.textEdit_3 = QtWidgets.QTextEdit(Form)
self.textEdit_3.setGeometry(QtCore.QRect(610, 200, 261, 221))
self.textEdit_3.setObjectName("textEdit_3")
self.pushButton_9 = QtWidgets.QPushButton(Form)
self.pushButton_9.setGeometry(QtCore.QRect(480, 450, 101, 41))
self.pushButton_9.setObjectName("pushButton_9")
self.pushButton_10 = QtWidgets.QPushButton(Form)
self.pushButton_10.setGeometry(QtCore.QRect(760, 450, 101, 41))
self.pushButton_10.setObjectName("pushButton_10")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(680, 40, 141, 31))
self.pushButton.setObjectName("pushButton")
# self.label_2 = QtWidgets.QLabel(Form)
# self.label_2.setGeometry(QtCore.QRect(380, 430, 91, 20))
# self.label_2.setObjectName("label_2")
# self.spinBox = QtWidgets.QSpinBox(Form)
# self.spinBox.setGeometry(QtCore.QRect(489, 426, 81, 22))
# self.spinBox.setObjectName("spinBox")
# self.spinBox.setValue(5)
# print(int(self.spinBox.text()))
self.pushButton_4.clicked.connect(self.dir)
self.pushButton_7.clicked.connect(self.color)
self.pushButton_6.clicked.connect(self.clearness)
self.pushButton_8.clicked.connect(self.openimage)
self.pushButton_9.clicked.connect(self.save_event_color)
self.pushButton_10.clicked.connect(self.save_event_clear)
self.pushButton.clicked.connect(self.Closewindow)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def dir(self):
#imgName imgType文件路径、文件类型
imgName, imgType = QFileDialog.getOpenFileName(None, "打开图片", "", "*.jpg;;*.png;;All Files(*)")
#将图片路径显示到textBrowser中
self.textBrowser_4.setText(imgName)
return imgName
def openimage(self):
#获取图片路径
imgName=self.textBrowser_4.toPlainText()
#调整图片的大小
image = QImage(imgName).scaled(self.textEdit.width(), self.textEdit.height())
#图片显示在textEdit中
cursor = self.textEdit.textCursor()
document = self.textEdit.document()
document.addResource(QTextDocument.ImageResource, QUrl("image"), image)
cursor.insertImage("image")
def color(self):
imgName=self.textBrowser_4.toPlainText()
# 打开图像文件
with Image.open(imgName) as img:
# 将图像保存到新文件
img.save('data/1.png')
# render_factor=int(self.spinBox.text())
os.system('python run.py')
# os.system('exit')
image = QImage('result_images/1.png').scaled(self.textEdit.width(), self.textEdit.height())
cursor = self.textEdit_2.textCursor()
document = self.textEdit_2.document()
document.addResource(QTextDocument.ImageResource, QUrl("image"), image)
cursor.insertImage("image")
def clearness(self):
imgName=self.textBrowser_4.toPlainText()
path =self.textEdit_2.toPlainText()
# print("空否")
# print(path)
# print(len(path))
if path=="":
print("yes")
with Image.open(imgName) as img:
img.save('E:/Code/GFPGAN-master/data/1.png')
else:
with Image.open('result_images/1.png') as img:
img.save('E:/Code/GFPGAN-master/data/1.png')
os.chdir('E:/Code/GFPGAN-master')
os.system('python inference_gfpgan.py -i data -o results -v 1.3 -s 2')
# os.system('python inference_gfpgan.py -i data -o results -v 1.3 -s 2')
# os.system('start cmd.exe /K cd D:\GFPGAN-master /K python inference_gfpgan.py -i data -o results -v 1.3 -s 2')
image = QImage('E:/Code/GFPGAN-master/results/restored_imgs/1.png').scaled(self.textEdit.width(), self.textEdit.height())
cursor = self.textEdit_3.textCursor()
document = self.textEdit_3.document()
document.addResource(QTextDocument.ImageResource, QUrl("image"), image)
cursor.insertImage("image")
def save_event_color(self):
# _translate = QtCore.QCoreApplication.translate
imgName, imgType = QFileDialog.getSaveFileName(None, "保存图片", "", "*.jpg;;*.png;;All Files(*)")
# 打印保存文件的全部路径(包括文件名和后缀名)
with Image.open('result_images/1.png') as img:
# 将图像保存到新文件
img.save(imgName)
def save_event_clear(self):
# _translate = QtCore.QCoreApplication.translate
imgName, imgType = QFileDialog.getSaveFileName(None, "保存图片", "", "*.jpg;;*.png;;All Files(*)")
# 打印保存文件的全部路径(包括文件名和后缀名)
with Image.open('E:/Code/GFPGAN-master/results/restored_imgs/1.png') as img:
# 将图像保存到新文件
img.save(imgName)
def Closewindow(self):
self.close()
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "图像修复"))
self.pushButton_4.setText(_translate("Form", "请选择图片"))
self.textBrowser_4.setHtml(_translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.pushButton_6.setText(_translate("Form", "图像增强"))
self.pushButton_7.setText(_translate("Form", "图像着色"))
self.pushButton_8.setText(_translate("Form", "展示原图"))
self.label.setText(_translate("Form", "<html><head/><body><p align=\"center\"><span style=\" font-size:18pt; font-weight:600; color:#55007f;\">图像修复界面</span></p></body></html>"))
self.pushButton_9.setText(_translate("Form", "图像保存"))
self.pushButton_10.setText(_translate("Form", "图像保存"))
self.pushButton.setText(_translate("Form", "退出系统"))
# self.label_2.setText(_translate("Form", "渲染因子"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
实现效果: