Pyqt5 可视化窗口(【写软著】自学用)

因为项目设计到写软著,一开始只有python程序,所以为了将它可视化界面,我就查了一下GUI界面的制作,下面算是一些笔记吧。整体流程参考b站视频【PYTHON】4分钟搞定GUI软件设计【GUI软件】【PYQT】【软件著作权】
细节入门参考PyQt基础知识 配套b站视频PyQt5 快速入门

1. Qt designer

pyqt5我的理解就是它是一个python库,然后直接调用就好了,Qt designer就是一个界面设计的软件,你用程序写出来的界面和这个软件设计出来的是一样,可以选择直接在这儿设计,能够得到设计这个页面的代码(下面讲),也可以直接用代码写出界面来,代码写界面会比较好理解,对于每一块怎么安排会更清晰一些,不过我想这些用熟了,哪个都一样。回归整体,安装qt,看一下b站或者知乎博客有很多,不具体讲了,一般会选择安装anaconda的时候,就已经有pyqt5库和qt软件。
找到路径如图:
QT designer路径图

  1. 建立窗口,总共有五种窗口如图,选择合适的即可
    QTdesigner设计面图
  • 如果需要菜单栏,那就选择MainWindow,菜单栏命令设置,直接如图

MainWindow

  • Dialog一般是适用弹出窗口的,有按键okcancel
  • Form目前是不需要菜单栏的,我不清楚具体使用的情况了
    以上三种窗口,前期使用了Form,并试图使用Dialog来作为弹出窗口,后来没能成功将二者联系起来,就放弃了,采用了MainWindow方法,菜单栏命令了程序的运行。
  1. Qt designer面板左侧为部件列表(widget box),里面是设计面板所需要的部件,点击需要的拖动到上面建立的窗口里面即可,部件总共有下面几种类型:
  • 布局(可以整体布局)

  • 间隔(垂直和水平两个部件,防止间隔部件的地方,不可以放置其它部件)

  • 按键(就是软件中的按钮,给定信号和槽就能执行相应的命令)

  • 两种列表部件(目前暂未用过)

  • 容器(就像划分房间是的,把部件放进容器就可以整体控制)

  • 输入(需要在界面上输入的地方都是在这里选)

  • 展示(需要将生成的东西展示就在这里选)
    在这里插入图片描述
    主要使用的就是下面三大部分(只记录我目前知道且用过的):

  • 按键
    好像没啥可讲的了

  • 输入(需要在界面上输入的地方都是在这里选)
    Line Edit线性编辑器,这个输入为一行,用来输入数字比较合适
    Text Edit文本编辑器,输入多行文字合适,双击可以设定文本样式,
    Plain Text Edit纯文本编辑器,似乎是个简约版的文本输入框,没有 Text Edit花样多
    其它待开发

  • 展示
    Label标签,页面上的文字基本上都可以用它来展示,不能多行
    Text Browser 文本浏览器,基本上程序输出的文本内容,都可以在这展示,python中使用append即可,不过只输出字符串,需要将输出内容转换为字符串格式
    Graphics View 图片视图,将程序绘制的图在这儿展示,目前还未完全掌握
    其它待开发

  1. 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. 该程序为程序能运行的必须条件 ,然后是建立与可视化界面各部件与程序直接的联系。
  2. 在上面程序注释1的位置,对各部件赋予命令执行。
    主要格式为:
#self.部件名称.信号.connect(self.命令函数名)
#,常见为点击按键执行命令,我用到的点击执行命令有以下两种   
     	self.菜单栏.triggered.connect(self.def1)
        self.pushButton.clicked.connect(self.Sdef2)

  1. 在注释2的位置,定义函数,为各部件需要执行的命令函数。
    主要格式为:
def def1(self,input1,input2,……):
	函数主体
  1. 函数中用到全局变量记得用global
  2. 用到界面中的变量,记得加self

4. 写在最后

把ui的py文件直接复制到新的py文件,也就完成了。总体看起来,其实不用特别久,就能写完这个,由于自己摸鱼和代码不熟练问题,写了十天才写完,还没完全摸到pyqt的门道,这篇笔记最后有一些烂尾,也是因为自己偷懒没用继续写了,接下来还是要为了自己的实习、以及论文做努力,后面会补上之前查资料用上的所有参考的博客、b站视频。

首次编辑于2022/4/27

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值