PyQt5 Qt Designer 新手教程(三)—— 对话框的最终实现

本文是PyQt5 Qt Designer新手教程的第三部分,详细讲解如何将.ui文件转换为.py模块,导入并实现对话框功能。通过CMD工具将.ui文件转为.py,然后导入窗体模块,实现信号槽连接。最后展示完整代码和运行结果,帮助初学者理解对话框的实现过程。
摘要由CSDN通过智能技术生成

PyQt5 Qt Designer 新手教程(三)—— 对话框的最终实现

教程博文
一、前言

上一节,我们用 Qt Designer 搭建了简易对话框窗体,那么这一节就是让对话框真正的成为一个窗口程序,并实现一定的功能。

二、把 .ui 文件转换为 py 文件

.ui 文件是 Qt Designer 的保存文件,是让它识别的;但是,对于 Python 来说,它还不认识,所以要把这个 .ui 文件转化为 .py 模块文件,再导入到自己的程序中,最终即可实现窗体功能。
在 CMD 中输入类似 pyuic5 -o C:\Users\hp\Desktop\example\ui_newimagedlg.py C:\Users\hp\Desktop\example\newimagedlg.ui
即可:
在这里插入图片描述
参考博文:PyQt5 处理 .ui 与 .qrc 文件的操作记录

下面是 ui_findandreplacedlg.py的实际内容,可以参考:

# -*- coding: utf-8 -*-
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_FindAndReplaceDlg(object):
    def setupUi(self, FindAndReplaceDlg):
        FindAndReplaceDlg.setObjectName("FindAndReplaceDlg")
        FindAndReplaceDlg.resize(396, 192)
        self.hboxlayout = QtWidgets.QHBoxLayout(FindAndReplaceDlg)
        self.hboxlayout.setContentsMargins(9, 9, 9, 9)
        self.hboxlayout.setSpacing(6)
        self.hboxlayout.setObjectName("hboxlayout")
        self.vboxlayout = QtWidgets.QVBoxLayout()
        self.vboxlayout.setContentsMargins(0, 0, 0, 0)
        self.vboxlayout.setSpacing(6)
        self.vboxlayout.setObjectName("vboxlayout")
        self.gridlayout = QtWidgets.QGridLayout()
        self.gridlayout.setContentsMargins(0, 0, 0, 0)
        self.gridlayout.setSpacing(6)
        self.gridlayout.setObjectName("gridlayout")
        self.replaceLineEdit = QtWidgets.QLineEdit(FindAndReplaceDlg)
        self.replaceLineEdit.setObjectName("replaceLineEdit")
        self.gridlayout.addWidget(self.replaceLineEdit, 1, 1, 1, 1)
        self.findLineEdit = QtWidgets.QLineEdit(FindAndReplaceDlg)
        self.findLineEdit.setObjectName("findLineEdit")
        self.gridlayout.addWidget(self.findLineEdit, 0, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(FindAndReplaceDlg)
        self.label_2.setObjectName("label_2")
        self.gridlayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.label = QtWidgets.QLabel(FindAndReplaceDlg)
        self.label.setObjectName("label")
        self.gridlayout.addWidget(self.label, 0, 0, 1, 1)
        self.vboxlayout.addLayout(self.gridlayout)
        self.hboxlayout1 = QtWidgets.QHBoxLayout()
        self.hboxlayout1.setContentsMargins(0, 0, 0, 0)
        self.hboxlayout1.setSpacing(6)
        self.hboxlayout1.setObjectName("hboxlayout1")
        self.caseCheckBox = QtWidgets.QCheckBox(FindAndReplaceDlg)
        self.caseCheckBox.setObjectName("caseCheckBox")
        self.hboxlayout1.addWidget(self.caseCheckBox)
        self.wholeCheckBox = QtWidgets.QCheckBox(FindAndReplaceDlg)
        self.wholeCheckBox.setChecked(False)
        self.wholeCheckBox.setObjectName("wholeCheckBox")
        self.hboxlayout1.addWidget(self.wholeCheckBox)
        self.vboxlayout.addLayout(self.hboxlayout1)
        self.hboxlayout2 = QtWidgets.QHBoxLayout()
        self.hboxlayout2.setContentsMargins(0, 0, 0, 0)
        self.hboxlayout2.setSpacing(6)
        self.hboxlayout2.setObjectName("hboxlayout2")
        self.label_3 = QtWidgets.QLabel(FindAndReplaceDlg)
        self.label_3.setObjectName("label_3")
        self.hboxlayout2.addWidget(self.label_3)
        self.syntaxComboBox = QtWidgets.QComboBox(FindAndReplaceDlg)
        self.syntaxComboBox.setObjectName("syntaxComboBox")
        self.syntaxComboBox.addItem("")
        self.syntaxComboBox.addItem("")
        self.hboxlayout2.addWidget(self.syntaxComboBox)
        self.vboxlayout.addLayout(self.hboxlayout2)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.vboxlayout.addItem(spacerItem)
        self.hboxlayout.addLayout(self.vboxlayout)
        self.line = QtWidgets.QFrame(FindAndReplaceDlg)
        self.line.setFrameShape(QtWidgets.QFrame.VLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.hboxlayout.addWidget(self.line)
        self.vboxlayout1 = QtWidgets.QVBoxLayout()
        self.vboxlayout1.setContentsMargins(0, 0, 0, 0)
        self.vboxlayout1.setSpacing(6)
        self.vboxlayout1.setObjectName("vboxlayout1")
        self.findButton = QtWidgets.QPushButton(FindAndReplaceDlg)
        self.findButton.setObjectName("findButton")
        self.vboxlayout1.addWidget(self.findButton)
        self.replaceButton = QtWidgets.QPushButton(FindAndReplaceDlg)
        self.replaceButton.setObjectName("replaceButton")
        self.vboxlayout1.addWidget(self.replaceButton)
        self.replaceAllButton = QtWidgets.QPushButton(FindAndReplaceDlg)
        self.replaceAllButton.setObjectName("replaceAllButton")
        self.vboxlayout1.addWidget(self.replaceAllButton)
        spacerItem1 = QtWidgets.QSpacerItem(20, 16, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.vboxlayout1.addItem(spacerItem1)
        self.closeButton = QtWidgets.QPushButton(FindAndReplaceDlg)
        self.closeButton.setObjectName("closeButton")
        self.vboxlayout1.addWidget(self.closeButton)
        self.hboxlayout.addLayout(self.vboxlayout1)
        self.label_2.setBuddy(self.replaceLineEdit)
        self.label.setBuddy(self.findLineEdit)
        self.label_3.setBuddy(self.syntaxComboBox)

        self.retranslateUi(FindAndReplaceDlg)
        self.closeButton.clicked.connect(FindAndReplaceDlg.reject)
        QtCore.QMetaObject.connectSlotsByName(FindAndReplaceDlg)
        FindAndReplaceDlg.setTabOrder(self.findLineEdit, self.replaceLineEdit)
        FindAndReplaceDlg.setTabOrder(self.replaceLineEdit, self.caseCheckBox)
        FindAndReplaceDlg.setTabOrder(self.caseCheckBox, self.wholeCheckBox)
        FindAndReplaceDlg.setTabOrder(self.wholeCheckBox, self.syntaxComboBox)
        FindAndReplaceDlg.setTabOrder(self.syntaxComboBox, self.findButton)
        FindAndReplaceDlg.setTabOrder(self.findButton, self.replaceButton)
        FindAndReplaceDlg.setTabOrder(self.replaceButton, self.replaceAllButton)
        FindAndReplaceDlg.setTabOrder(self.replaceAllButton, self.closeButton)

    def retranslateUi(self, FindAndReplaceDlg):
        _translate = QtCore.QCoreApplication.translate
        FindAndReplaceDlg.setWindowTitle(_translate("FindAndReplaceDlg", "Find and Replace"))
        self.label_2.setText(_translate("FindAndReplaceDlg", "Replace w&ith:"))
        self.label.setText(_translate("FindAndReplaceDlg", "Find &what:"))
        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"
### 回答1: PyQt5 Qt Designer 新手教程可以分为以下几个步骤: 1. 安装 PyQt5Qt Designer:在安装 PyQt5 之前,需要先安装 Python。然后,可以使用 pip 命令安装 PyQt5Qt Designer。 2. 打开 Qt Designer:在命令行中输入 designer 命令,即可打开 Qt Designer。 3. 创建界面:在 Qt Designer 中,可以使用拖拽的方式创建界面。可以选择不同的控件,如按钮、标签、文本框等,然后将它们拖拽到界面中。 4. 设置属性:在创建控件后,可以设置它们的属性,如大小、位置、颜色等。可以通过属性编辑器或者属性面板来设置属性。 5. 保存界面:在完成界面设计后,可以将界面保存为 .ui 文件。这个文件可以在 Python 代码中使用。 6. 将界面与代码结合:在 Python 代码中,可以使用 PyQt5 的模块来加载 .ui 文件,并将界面与代码结合起来。可以通过信号和槽来实现控件之间的交互。 以上就是 PyQT5 Qt Designer 新手教程的基本步骤。希望对您有所帮助。 ### 回答2: PyQt5是一个非常强大的Python GUI工具包,可以帮助你构建高效和美观的用户界面,而Qt Designer则是PyQt5的图形化设计工具,让你可以使用可视化的方式创建和布局PyQt5的用户界面。本篇教程将为新手入门PyQt5的使用方法之一,详述如何使用Qt Designer来创建PyQt5 GUI程序。以下是流程: ### 步骤1:安装PyQt5Qt Designer 首先,需要安装PyQt5Qt Designer。我们可以在PyQt5官网上下载和安装PyQt5,或者使用命令行或终端安装。具体步骤如下: ``` pip install pyqt5 ``` 安装完成后,我们可以使用命令行或终端启动Qt Designer: ``` designer ``` ### 步骤2:创建PyQt5 GUI程序 使用Qt Designer创建PyQt5 GUI程序的第一步是创建一个新项目。 - 在Qt Designer中选择File > New… > Widget > Choose,此时会创建一个新的窗口。 - 在窗口上添加控件,比如按钮、标签和文本框等。 - 在Qt Designer中选择File > Save As…来保存你的项目文件。此时会生成一个以.ui结尾的文件,这个文件包含了你所创建的窗口和控件信息。 ### 步骤3:将Qt Designer生成的UI文件转换成Python代码 我们无法直接在Python环境中使用Qt Designer生成的UI文件,需要将其转换成可用的Python代码。这一步可以使用PyUIC工具来完成,PyUIC是PyQt5的一个命令行应用程序,它可以将Qt Designer生成的UI文件转换为Python模块文件。在终端中运行以下命令来将.ui文件转换成.py文件: ``` pyuic5 filename.ui -o filename.py ``` 其中,filename为你所创建的UI文件的名字。 ### 步骤4:编写Python代码 现在,我们已经将Qt Designer生成的UI文件转换成了Python模块文件,接下来只需要在Python交互环境或PyCharm中编写Python代码即可。在编写Python代码时,需要在文件开头导入所需模块: ```python from PyQt5.QtWidgets import QApplication, QWidget from filename import Ui_Form ``` 然后在类中继承Ui_Form: ```python class MainWindow(QWidget, Ui_Form): def __init__(self): super().__init__() self.setupUi(self) ``` 最后,在Python交互环境或PyCharm中运行你所编写的代码,即可看到Qt Designer生成的GUI界面。 总结: 本文列出了从安装PyQt5Qt Designer,到创建和保存窗口和控件,再到将Qt Designer生成的UI文件转换成Python模块文件等一系列步骤。希望这篇文章对PyQt5新手用户提供了有用和详细的指导,让大家能够更加方便快捷地使用PyQt5来创建图形化用户界面。 ### 回答3: PyQt5是一个Python的GUI框架,它允许创建跨平台的桌面应用程序。其中,Qt Designer是一个可视化的GUI设计工具,它提供了一系列的图形化控件和布局,可以轻松地设计和布局GUI界面,同时还提供代码模板,可以帮助快速生成基本GUI应用程序的骨架代码。在PyQt5中使用Qt Designer可以帮助开发者更为高效地进行开发工作。 如果你正在使用PyQt5Qt Designer进行开发,以下是几个简单的步骤: 1. 安装PyQt5Qt Designer:可以通过pip进行安装,例如输入 "pip install PyQt5"和"pip install pyqt5-tools",其中pyqt5-tools包含了Qt Designer。 2. 启动Qt Designer:可以通过运行“designer.exe”或在命令行中输入“designer”打开Qt Designer。 3. 设计GUI界面:可以拖拽各种图形化的控件和布局进行设计,还可以设置每个控件的属性和事件。 4. 保存设计界面:保存文件时需要注意使用.ui扩展名,以便在Python代码中导入UI文件。 5. 生成代码:在Qt Designer中,可以使用 "File" -> "Save As..." 选项保存设计好的 UI 文件,在 Python 代码中通过 “uic.loadUiType()" 方法导入 UI 文件,生成一个名为 Ui_Class 的UI类。 最后,你可以使用UI类中的各种方法来实现你需要的功能。例如,你可以使用 QtGui.QWidget 基类创建一个新窗口,并使用 Ui_Class.ui 中定义的组件来填充窗口,并使用槽函数(Gridlayout_example.clicked())实现该组件的交互功能。 总体而言,PyQt5Qt Designer是一种非常方便的GUI开发框架,可以让开发者轻松创建各种类型的GUI应用程序。虽然这只是一个简单的入门指南,但是对于初学者来说,它可能是一个有用的教程,可以帮助开发者更快速地熟悉PyQt5Qt Designer的使用。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值