tyron's page 不断探索是一件好事,学无止境!

用pyQt设计GUI

2024-10-17
David


环境准备

  • python 3.11—————编程语言
  • PyQt5, pyqt5_tools——–python库
  • Qt Designer—————GUI设计工具

步骤

  1. 安装环境

【1】安装python

下载python下载安装包,双击安装。

【2】安装PyQt5, pyqt5_tools

pip install PyQt5 PyQt5-tools -I https://pypi.tuna.tsinghua.edu.cn/simple

【3】安装Qt Designer 下载Qt Designer下载安装包,双击安装。

  1. 操作

【1】用Qt Designer设计界面 参考这里,设计界面。

使用 Qt Designer 创建一个基于 QWidget 的界面程序,然后给窗体内增加一个按钮控件。具体如何给窗体增加控件,如下图所示。 Qt Designer 界面设计1

按 Ctrl+s 键或者点击 Qt Designer 软件的 File 菜单的 Save As 选项,把我们设计的界面文件保存到项目目录下,如上例我们保存到项目 pyqt5project 目录下,保存名称为 mytest_1.ui,注意使用 Qt Designer 设计的界面文件后缀名是 .ui。

使用 Qt Designer 工具,不单单可以设计界面,还可以设计信号槽,下面我们就使用 Qt Designer 给我们的按钮设计一个信号槽。 Qt Designer 界面设计1

按照上面步骤操作完成后,点击 ok 按钮,就会返回到上一个对话框,我们对话框的右边 出现了 doclick(),选中后,点击 ok。到此为止,我们就成功的给按钮创建了信号槽。 Qt Designer 界面设计1

【2】转换ui文件为python代码

>pyuic5 -o mytest_1.py mytest_1.ui
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mytest_1.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.btn_ok = QtWidgets.QPushButton(Form)
        self.btn_ok.setGeometry(QtCore.QRect(180, 150, 56, 17))
        self.btn_ok.setObjectName("btn_ok")

        self.retranslateUi(Form)
        self.btn_ok.clicked.connect(Form.doclick) # type: ignore
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.btn_ok.setText(_translate("Form", "click"))

【3】编辑逻辑code 在其中, 引用【2】中的界面code,并保存。如将逻辑代码保存为domytest_1.py。

并和刚刚生成那个mytest_1.py,放在同一个目录里。

import sys
import mytest_1  # import UI file
from PyQt5.QtWidgets import QWidget, QApplication, QMessageBox

class doMyTest_1(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = mytest_1.Ui_Form()  # call UI object
        self.ui.setupUi(self)       # link me
        self.show()

    def doclick(self):
        QMessageBox.information(None, "test info slot!", "my python")

app = QApplication(sys.argv)
ex = doMyTest_1()
app.exec()

直接在代码编辑器里面右键运行domytest_1.py。

注意:

用PyQt5实现上述code。

如果用PyQt6实现上述代码,会有错误发生:

  File "c:\d_disk\RenesasMCUHWM\RCar\Gen4\R-Car_S4\Application_Notes_for_HWM\gateway_switch\GatewaySettingTool\code\python_Qt\mytest.py", line 16, in setupUi
    self.btn_ok = QtWidgets.QPushButton(parent=Form)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: arguments did not match any overloaded call:
  QPushButton(parent: typing.Optional[QWidget] = None): argument 'parent' has unexpected type 'doMyTest'
  QPushButton(text: str, parent: typing.Optional[QWidget] = None): not enough arguments
  QPushButton(icon: QIcon, text: str, parent: typing.Optional[QWidget] = None): not enough arguments
PS C:\d_disk\RenesasMCUHWM\RCar\Gen4\R-Car_S4\Application_Notes_for_HWM\gateway_switch\GatewaySettingTool\code>

Comments

Content