在第一节课中我们已经学会了PyQty5的安装,以及配置好了两个环境,如果还没有看到的小伙伴可以前去考古:点我。今天我们将会继续学习PyQty5的设计界面的认识,也会带领大家一步一步设计出一个小GUI作品。
首先我们创建一个py文件,然后右击,点击上一节课中配置好的环境进入PyQty5的设计界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/d0b230efe1c6442bad9ca42489f2d6dd.png)
1、点击左上角【File】新建一个【无按钮】的窗口
![在这里插入图片描述](https://img-blog.csdnimg.cn/09fe98cde47d4d14a3c1564180a617e1.png)
2、在左边 【Display Widgets
】 中把 【Label
】拖入中间的窗体中
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ff2f9e539df460ea2010def765d45ac.png)
3、修改第一个标签的属性
输入 Find &What:,可以双击输入,或者右边改(&作用是加速键 Alt)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7cd85517f7740179f17185e639a614a.png)
4、左边【 Input Widgets
】中把 【LineEdit
】(行编辑) 拖入中间的窗体中
![在这里插入图片描述](https://img-blog.csdnimg.cn/be63d064fbf84a97832b5c53bc6bd699.png)
5、修改刚刚拖动的【LineEdit
】(行编辑) 框的属性,修改名字:【findLineEidt
】
修改此行编辑框的对象名(作用是在后面的实际代码编写中,还可以用到,因此取一个有意义的名字)
操作类似代码中:findLineEidt =QLabel()
![在这里插入图片描述](https://img-blog.csdnimg.cn/1489c34532514271af5a242de0064ef3.png)
6、重复上面两个操作,变成下面这样
第二个标签的文本为【Replace w&ith:
】
第二个行编辑框的对象名字为 【replaceLineEidt
】
![在这里插入图片描述](https://img-blog.csdnimg.cn/b98bc1ca698a434bafd5b1e90c765836.png)
7、在左边 【Buttons
】 中把 【check Box
】 拖入中间的窗体中
把复选框的文本改为【&Case sensitive
】,对象名改为【caseCheckBox
】重复上述操作即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/ca0333483861465a9765db591693c310.png)
8、重复上述操作
把复选框的文本改为【Wh&ole words
】,对象名改为【wholeCheckBox
】
![在这里插入图片描述](https://img-blog.csdnimg.cn/b941962172554b588b7e04947e418b7b.png)
9、继续添加一个 Syntax 的标签
标签的文本设置为【&Syntax:
】
![在这里插入图片描述](https://img-blog.csdnimg.cn/59ee9faae3cc47368f1888138a333d4f.png)
10、在左边 【Input Widgets
】 中把 【Combo Box
】 拖入中间的窗体中,取名为:【syntaxComboBox
】
![在这里插入图片描述](https://img-blog.csdnimg.cn/e1eaac7d95be4b71aef89283866be9ed.png)
11、给组合框添加项目
右键点击组合框,选 Edit Items
![在这里插入图片描述](https://img-blog.csdnimg.cn/620d605afa2b4f638d125da4ffdef314.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0e8e47111cf14204b438e52523740df2.png)
输入【Literal text
】与【Regular expression
】点击ok
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e2deae4f2364dfe9946f45a43ffe945.png)
12、在左边 【Spacers
】 中把 【Vertical Spacer
】 拖入中间的窗体中
如果用户重新修改了窗体的尺寸大小,如果希望各个窗口部件能够放在一起而不是分散开来,可以 Combo box 的下面放置一个竖直分隔符(Vertical Spacer)
![在这里插入图片描述](https://img-blog.csdnimg.cn/640384b9136142c28a00d7d611afa888.png)
13、在左边 【Display Widgets
】 中把 【Vertical Line
】 拖入中间的窗体中
要让这些按钮能够与已经创键的窗口部件在形式上区分开来,可以在它们和其他窗口部件之间放一根竖线。
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd4bbdcd1b5645068cf64547d0030125.png)
14、在左边【 Buttons
】中把 【Push Button
】 拖入中间的窗体中
按钮的文本为【&Find
】,对象名为【findButton
】
![在这里插入图片描述](https://img-blog.csdnimg.cn/08af675f8b6d40d3813615200693afd3.png)
15、依次重复上述提到的操作,直至到下面的情况
依次输入文本、对象名:
-
【&Replace
】、【replaceButton
】;
-
【Replace &All
】、【replaceAllButton
】;
-
【 Close
】、【closeButton
】。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0d29cff8ab24b54a49d21d7e6cd05bf.png)
16设置第一个布局
CTRL+鼠标,选中以下控件,并点击点击网格布局
![在这里插入图片描述](https://img-blog.csdnimg.cn/ad4670486ece479f9e22d1ff95ad9330.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/740c13297916470eb2a908eb3b04c55e.png)
17、接下来的依次布局即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/3758277e61cc437eb2ccb69ddb6193ee.png)
对布局和控件,可以继续布局,可以如果选起来不方便,可以在右上角的停靠窗口选择
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3d4bc77d13b4e0697dfe05719c76955.png)
18、设置伙伴关系,F3 退出此状态
这一步就可以消除之前标签里的&,并且让伙伴功能上线。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ee69f012efce4c348ccf41cee8eded29.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/39c5e9bd093740b98a976f1967f135a8.png)
19、设置 Tab 顺序
用默认即可,F3 退出
![在这里插入图片描述](https://img-blog.csdnimg.cn/d64c91dbc5534918b25e425f2b5a2629.png)
20、绑定 Close 的槽函数,拖动Close按钮至空白区域
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ca11ac1a5344a60856856677b04f86f.png)
依次选择 clicked()、reject()、ok,即把 Close 按钮绑定到主窗体的关闭函数
![在这里插入图片描述](https://img-blog.csdnimg.cn/f3f48addf5b24715bd2f99a58f17a7e4.png)
21、设定窗体类名、标题名、文件名
点击空白窗体处,右边修改窗体类名、标题名。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ac64eb4fd2444b889534f3818ba810ce.png)
文件保存时,File->Save或者Ctrl+s
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bb09e75f7774e7583c84dc50923d044.png)
22、ui 转 py
点击我们上一步保存的ui文件
右击,然后利用上一节课的ui 转 py 环境进行转换
![在这里插入图片描述](https://img-blog.csdnimg.cn/4431be9e445d4feb9eec3a2108fc6e56.png)
会上生成一个同名的 py 文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/910c807c77fc40739c1bbc34acc91463.png)
尾部加上创建对象的代码,然后右击运行
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mainWindow = QtWidgets.QDialog()
ui = Ui_FindAndReplaceDlg()
ui.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())
ok,到此为止我们的界面设计完毕
![请添加图片描述](https://img-blog.csdnimg.cn/cc0042bf904940758b3c8a38e2bd76fe.gif)
刚刚视频的代码
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_FindAndReplaceDlg(object):
def setupUi(self, FindAndReplaceDlg):
FindAndReplaceDlg.setObjectName("FindAndReplaceDlg")
FindAndReplaceDlg.resize(424, 180)
self.line = QtWidgets.QFrame(FindAndReplaceDlg)
self.line.setGeometry(QtCore.QRect(297, 9, 20, 161))
self.line.setFrameShape(QtWidgets.QFrame.VLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.widget = QtWidgets.QWidget(FindAndReplaceDlg)
self.widget.setGeometry(QtCore.QRect(10, 9, 286, 158))
self.widget.setObjectName("widget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(self.widget)
self.label.setTextFormat(QtCore.Qt.AutoText)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.findLineEdit = QtWidgets.QLineEdit(self.widget)
self.findLineEdit.setObjectName("findLineEdit")
self.gridLayout.addWidget(self.findLineEdit, 0, 1, 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.replaceLineEdit = QtWidgets.QLineEdit(self.widget)
self.replaceLineEdit.setObjectName("replaceLineEdit")
self.gridLayout.addWidget(self.replaceLineEdit, 1, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.caseCheckBox = QtWidgets.QCheckBox(self.widget)
self.caseCheckBox.setObjectName("caseCheckBox")
self.horizontalLayout.addWidget(self.caseCheckBox)
self.wholeCheckBox = QtWidgets.QCheckBox(self.widget)
self.wholeCheckBox.setChecked(False)
self.wholeCheckBox.setObjectName("wholeCheckBox")
self.horizontalLayout.addWidget(self.wholeCheckBox)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setObjectName("label_3")
self.horizontalLayout_2.addWidget(self.label_3)
self.syntaxComboBox = QtWidgets.QComboBox(self.widget)
self.syntaxComboBox.setObjectName("syntaxComboBox")
self.syntaxComboBox.addItem("")
self.syntaxComboBox.addItem("")
self.horizontalLayout_2.addWidget(self.syntaxComboBox)
self.verticalLayout.addLayout(self.horizontalLayout_2)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.widget1 = QtWidgets.QWidget(FindAndReplaceDlg)
self.widget1.setGeometry(QtCore.QRect(316, 10, 99, 155))
self.widget1.setObjectName("widget1")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.findButton = QtWidgets.QPushButton(self.widget1)
self.findButton.setObjectName("findButton")
self.verticalLayout_2.addWidget(self.findButton)
self.replaceButton = QtWidgets.QPushButton(self.widget1)
self.replaceButton.setObjectName("replaceButton")
self.verticalLayout_2.addWidget(self.replaceButton)
self.replaceAllButton = QtWidgets.QPushButton(self.widget1)
self.replaceAllButton.setObjectName("replaceAllButton")
self.verticalLayout_2.addWidget(self.replaceAllButton)
spacerItem1 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.verticalLayout_2.addItem(spacerItem1)
self.closeButton = QtWidgets.QPushButton(self.widget1)
self.closeButton.setObjectName("closeButton")
self.verticalLayout_2.addWidget(self.closeButton)
self.label.setBuddy(self.findLineEdit)
self.label_2.setBuddy(self.replaceLineEdit)
self.label_3.setBuddy(self.syntaxComboBox)
self.retranslateUi(FindAndReplaceDlg)
self.closeButton.clicked.connect(FindAndReplaceDlg.reject)
QtCore.QMetaObject.connectSlotsByName(FindAndReplaceDlg)
def retranslateUi(self, FindAndReplaceDlg):
_translate = QtCore.QCoreApplication.translate
FindAndReplaceDlg.setWindowTitle(_translate("FindAndReplaceDlg", "Find and Replace"))
self.label.setText(_translate("FindAndReplaceDlg", "Find &what:"))
self.label_2.setText(_translate("FindAndReplaceDlg", "Replace with:"))
self.caseCheckBox.setText(_translate("FindAndReplaceDlg", "&Case sensitive"))
self.wholeCheckBox.setText(_translate("FindAndReplaceDlg", "Wh&ole words"))
self.label_3.setText(_translate("FindAndReplaceDlg", "&Syntax:"))
self.syntaxComboBox.setItemText(0, _translate("FindAndReplaceDlg", "Literal text"))
self.syntaxComboBox.setItemText(1, _translate("FindAndReplaceDlg", "Regular expression"))
self.findButton.setText(_translate("FindAndReplaceDlg", "&Find"))
self.replaceButton.setText(_translate("FindAndReplaceDlg", "&Replace"))
self.replaceAllButton.setText(_translate("FindAndReplaceDlg", "Replace &All"))
self.closeButton.setText(_translate("FindAndReplaceDlg", "Close"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mainWindow = QtWidgets.QDialog()
ui = Ui_FindAndReplaceDlg()
ui.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())
这是我们今天学习PyQty5的第 4 课,接下来我也会认真学习,下一节课我们来学习功能按钮的实现,本来打算写在这一节课上,但是一下子写太多,我脑子记不住,就留在下一节课讲吧!!
希望对大家有帮助
致力于办公自动化的小小程序员一枚#
都看到这了,关注+点赞+收藏=不迷路!!
如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!