生成的.py格式的文件
在上一篇博客中:Python制作小软件——1. 安装并使用PyQt5进行界面设计,我们说到生成了界面对应的.py
格式的文件,里面的内容如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'srs1.0.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_SRS(object):
def setupUi(self, SRS):
SRS.setObjectName("SRS")
SRS.resize(501, 102)
self.widget = QtWidgets.QWidget(SRS)
self.widget.setGeometry(QtCore.QRect(10, 10, 481, 90))
self.widget.setObjectName("widget")
self.gridLayout = QtWidgets.QGridLayout(self.widget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.widget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setDefault(False)
self.pushButton.setFlat(False)
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 0, 4, 1, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout.addWidget(self.pushButton_2, 1, 4, 1, 1)
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.widget)
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
font.setStrikeOut(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_3.setFont(font)
self.label_3.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.label_3.setMouseTracking(True)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.pushButton_ok = QtWidgets.QPushButton(self.widget)
self.pushButton_ok.setDefault(True)
self.pushButton_ok.setObjectName("pushButton_ok")
self.gridLayout.addWidget(self.pushButton_ok, 2, 2, 1, 1)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setObjectName("pushButton_3")
self.horizontalLayout.addWidget(self.pushButton_3)
self.gridLayout.addLayout(self.horizontalLayout, 2, 4, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.widget)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout.addWidget(self.lineEdit_2, 1, 1, 1, 2)
self.pushButton.raise_()
self.pushButton_2.raise_()
self.label_3.raise_()
self.label_3.raise_()
self.retranslateUi(SRS)
self.pushButton_3.clicked.connect(SRS.close)
QtCore.QMetaObject.connectSlotsByName(SRS)
def retranslateUi(self, SRS):
_translate = QtCore.QCoreApplication.translate
SRS.setWindowTitle(_translate("SRS", "Dialog"))
self.label.setText(_translate("SRS", "请输入文件所在路径:"))
self.pushButton.setText(_translate("SRS", "添加文件"))
self.pushButton_2.setText(_translate("SRS", "添加文件夹"))
self.label_2.setText(_translate("SRS", "输出文件夹:"))
self.label_3.setText(_translate("SRS", "<html><head/><body><p><br/></p></body></html>"))
self.pushButton_ok.setText(_translate("SRS", "OK"))
self.pushButton_3.setText(_translate("SRS", "Cancel"))
上面的代码对应的是界面中所有的内容,这个我们可以不用管,只需要知道相应控件对应的变量名称是什么,这个我们在写连接函数时需要用到。
在Python中查看在Qt Designer
中设计的界面
我们发现,有了上述的代码,却不能直接运行查看我们刚刚设计出来的界面。这时我们首先将前面的.py
文件存到Python的默认路径下,然后再新建一个文件夹,输入如下代码即可运行查看了。
from PyQt5 import QtWidgets
from srs import Ui_SRS
class mywindow(QtWidgets.QWidget, Ui_SRS):
def __init__ (self):
super(mywindow, self).__init__()
self.setupUi(self)
if __name__=="__main__":
import sys
app=QtWidgets.QApplication(sys.argv)
ui = mywindow()
ui.show()
sys.exit(app.exec_())
运行之后就会弹出我们前面设计好的界面:
但这时候点击里面所有的按键都没有作用(因为还没写好里面的一些函数,只有一个忽悠人的空架子)。所以下面,我们就要开始丰富上面的那段代码,来实现每个按钮的功能。
在这之前,我们需要先设置Cancel
的退出功能,这部分功能其实是在Qt Designer
里面就需要设置好的。
设置按钮的退出的功能
首先回到我们的Qt Designer
。首先选择上面的Edit Signals/Slots
,如下图所示。这个叫做“槽”
,很多博客对其有着详细的描述,这里我们只是简单的进行使用。
然后按着Cancel
按钮,滑动鼠标,就会弹出下面的框框出来:
这里我们选择下面clicked()
然后将下面的显示所有内容那里打上勾,然后再选择右边的close()
,即可完成操作。
完成之后的界面长下面这样:
然后进行保存即可。之后记得再将.ui
文件转换为.py
文件。
这一部分对应的原始文件中代码是:
self.pushButton_3.clicked.connect(SRS.close)
这时,我们就可以再在Python运行主体函数,在弹出我们所需的界面后,点击Cancel
发现可以直接关闭窗口了。
到这里,界面对应的代码基本就不需要再做改动了,后面的内部实现功能直接照着.py
文件(例子中是srs.py
)中的对象名称进行设计即可。这部分内容在 Python制作小软件——3. 利用PyQt5实现界面中的功能中会进行详细介绍~