因为项目设计到写软著,一开始只有python程序,所以为了将它可视化界面,我就查了一下GUI界面的制作,下面算是一些笔记吧。整体流程参考b站视频【PYTHON】4分钟搞定GUI软件设计【GUI软件】【PYQT】【软件著作权】
细节入门参考PyQt基础知识 配套b站视频PyQt5 快速入门
1. Qt designer
pyqt5我的理解就是它是一个python库,然后直接调用就好了,Qt designer就是一个界面设计的软件,你用程序写出来的界面和这个软件设计出来的是一样,可以选择直接在这儿设计,能够得到设计这个页面的代码(下面讲),也可以直接用代码写出界面来,代码写界面会比较好理解,对于每一块怎么安排会更清晰一些,不过我想这些用熟了,哪个都一样。回归整体,安装qt,看一下b站或者知乎博客有很多,不具体讲了,一般会选择安装anaconda的时候,就已经有pyqt5库和qt软件。
找到路径如图:
- 建立窗口,总共有五种窗口如图,选择合适的即可
- 如果需要菜单栏,那就选择MainWindow,菜单栏命令设置,直接如图
- Dialog一般是适用弹出窗口的,有按键okcancel
- Form目前是不需要菜单栏的,我不清楚具体使用的情况了
以上三种窗口,前期使用了Form,并试图使用Dialog来作为弹出窗口,后来没能成功将二者联系起来,就放弃了,采用了MainWindow方法,菜单栏命令了程序的运行。
- Qt designer面板左侧为部件列表(widget box),里面是设计面板所需要的部件,点击需要的拖动到上面建立的窗口里面即可,部件总共有下面几种类型:
-
布局(可以整体布局)
-
间隔(垂直和水平两个部件,防止间隔部件的地方,不可以放置其它部件)
-
按键(就是软件中的按钮,给定信号和槽就能执行相应的命令)
-
两种列表部件(目前暂未用过)
-
容器(就像划分房间是的,把部件放进容器就可以整体控制)
-
输入(需要在界面上输入的地方都是在这里选)
-
展示(需要将生成的东西展示就在这里选)
主要使用的就是下面三大部分(只记录我目前知道且用过的): -
按键
好像没啥可讲的了 -
输入(需要在界面上输入的地方都是在这里选)
Line Edit线性编辑器,这个输入为一行,用来输入数字比较合适
Text Edit文本编辑器,输入多行文字合适,双击可以设定文本样式,
Plain Text Edit纯文本编辑器,似乎是个简约版的文本输入框,没有 Text Edit花样多
其它待开发 -
展示
Label标签,页面上的文字基本上都可以用它来展示,不能多行
Text Browser 文本浏览器,基本上程序输出的文本内容,都可以在这展示,python中使用append即可,不过只输出字符串,需要将输出内容转换为字符串格式
Graphics View 图片视图,将程序绘制的图在这儿展示,目前还未完全掌握
其它待开发
- Qt designer右侧是添加的部件信息,对于添加到窗口的部件,需要对它们进行一个更方便管理的处理,以及对其信息进行修改,总共有下面三个:
- 对象查看器: 对添加的部件的总体管理,主要对其修改命名,方便管理,因为其本质为代码里的变量名称,所以只能命名为英文
- 属性编辑器:目前能用上的地方就是“对象名称”,也就是对象查看器可以修改的地方,部件位置微调(手动调节部件距离一次为10),字体大小等
- 信号、槽编辑器: 对于按键等部件可以设置命令,例如,点击某个按钮让它执行xx命令。
2. ui转py文件
完成Qt designer界面设计之后,需要将界面设计内容转为py文件,才可以对其进行程序化处理,(当然也可以直接在py文件中程序设计界面)。
将窗口保存,命名为xx.ui文件,在同目录下新建文本文档(.txt),在文档中输入
pyuic5 -o py文件名.py xx(定义的ui文件名).ui
pause
保存txt文件,将txt文件后缀改为bat,双击运行即可得到界面设计出xx.ui文件对应的py程序
示例:
打开py文件后,程序如图,采用了文章b站视频up的示例程序
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'add.ui' (add.ui为如上述视频出处代码)
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
#class Ui_Ui文件名(object)
class Ui_Form(object):
def setupUi(self, Form):
# def setupUi(self,Ui文件名)
#ui文件信息
Form.setObjectName("Form")
Form.resize(679, 350)
#每一个部件的信息,对象名称、大小、位置、类型,
#self.部件名称,QT设计后,这些都不需要我们写,我们只需要将其能对应上界面位置即可,如果是手写程序则需按照样式来
self.input1 = QtWidgets.QLineEdit(Form)
self.input1.setGeometry(QtCore.QRect(60, 90, 141, 51))
font = QtGui.QFont()
font.setPointSize(20)
self.input1.setFont(font)
self.input1.setText("")
self.input1.setObjectName("input1")
self.input2 = QtWidgets.QLineEdit(Form)
self.input2.setGeometry(QtCore.QRect(250, 90, 141, 51))
font = QtGui.QFont()
font.setPointSize(20)
self.input2.setFont(font)
self.input2.setText("")
self.input2.setObjectName("input2")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(210, 110, 31, 16))
font = QtGui.QFont()
font.setPointSize(20)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(400, 110, 31, 16))
font = QtGui.QFont()
font.setPointSize(20)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.result = QtWidgets.QTextBrowser(Form)
self.result.setGeometry(QtCore.QRect(420, 91, 191, 51))
font = QtGui.QFont()
font.setPointSize(20)
self.result.setFont(font)
self.result.setObjectName("result")
self.add = QtWidgets.QPushButton(Form)
self.add.setGeometry(QtCore.QRect(240, 180, 161, 51))
font = QtGui.QFont()
font.setPointSize(20)
self.add.setFont(font)
self.add.setObjectName("add")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
# def retranslateUi(self,Ui文件名)
def retranslateUi(self, Form):
# _translate = QtCore.QCoreApplication.translate
_translate = QtCore.QCoreApplication.translate
#Ui文件名.setWindowTitle(_translate("Ui文件名", "主窗口命名"))
#self.输入框/按键等对象名称.setText(_translate("Ui文件名", "标签1"))
#self.菜单/标题等.setTitle(_translate("Ui文件名", "显示信息"))
Form.setWindowTitle(_translate("Form", "主窗口命名"))
self.label.setText(_translate("Form", "标签信息1"))
self.label_2.setText(_translate("Form", "标签信息2"))
self.add.setText(_translate("Form", "标签信息3"))
3.建立界面与已有python程序之间的关系
首先,不管三七二十一,直接新建一个py文件,输入下面的程序
#导入程序运行必须模块
import sys#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow#导入designer工具生成的图窗模块,可能在使用过程中,这些还不够,但是导入库是一个常规操作,不需要我多解释
from add import Ui_Form #导入上述ui文件转出的py文件中可视化界面的类
class MyMainForm(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
#1
#2
if __name__ == "__main__":#固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)#初始化
myWin = MyMainForm()#将窗口控件显示在屏幕上
myWin.show()#程序运行,sys.exit方法确保程序完整退出。
sys.exit(app.exec_())
- 该程序为程序能运行的必须条件 ,然后是建立与可视化界面各部件与程序直接的联系。
- 在上面程序注释1的位置,对各部件赋予命令执行。
主要格式为:
#self.部件名称.信号.connect(self.命令函数名)
#,常见为点击按键执行命令,我用到的点击执行命令有以下两种
self.菜单栏.triggered.connect(self.def1)
self.pushButton.clicked.connect(self.Sdef2)
- 在注释2的位置,定义函数,为各部件需要执行的命令函数。
主要格式为:
def def1(self,input1,input2,……):
函数主体
- 函数中用到全局变量记得用global
- 用到界面中的变量,记得加self
4. 写在最后
把ui的py文件直接复制到新的py文件,也就完成了。总体看起来,其实不用特别久,就能写完这个,由于自己摸鱼和代码不熟练问题,写了十天才写完,还没完全摸到pyqt的门道,这篇笔记最后有一些烂尾,也是因为自己偷懒没用继续写了,接下来还是要为了自己的实习、以及论文做努力,后面会补上之前查资料用上的所有参考的博客、b站视频。
首次编辑于2022/4/27