python 之 Qt Designer工具的使用方法

一、Qt Designer简介
Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。

二、Qt Designer工具主界面
方法一:tools–External Tools–Qt Designer
配置过程可点击链接查看详情:Qt Designer工具相关安装配置
在这里插入图片描述

方法二:打开路径:${python安装目录}/Lib/site-packages/pyqt5_tools/designer.exe。主界面如下:
在这里插入图片描述

三、主界面不同区域介绍:

工具箱 区域:提供Gui界面开发各种基本控件,如单选框、文本框等。可以拖动到新创建的主程序界面。

主界面区域:用户放置各种从工具箱拖过来的各种控件。模板选项中最常用的就是Widget(通用窗口)和MainWindow(主窗口)。二者区别主要是Widget窗口不包含菜单栏、工具栏等。可以分别创建对比看看。

对象查看器 区域:查看主窗口放置的对象列表。

属性编辑器 区域: 提供对窗口、控件、布局的属性编辑功能。比如修改控件的显示文本、对象名、大小等。

信号/槽编辑器 区域:编辑控件的信号和槽函数,也可以添加自定义的信号和槽函数。

四、Qt Designer基本控件介绍
Widget Box控件工具箱是按照控件作用类别进行划分的。这里作为实现入门级界面实现,主要介绍最常使用的控件及控件对象相关函数。函数方法知道怎么获取控件输入内容以及如何将后台操作结果输出到界面控件显示的主要函数就可以了。
(1)显示控件。

Lable:文本标签,显示文本,可以用来标记控件。

Text Browser:显示文本控件。用于后台命令执行结果显示。

(2)输入控件,提供与用户输入交互

Line Edit:单行文本框,输入单行字符串。控件对象常用函数为Text() 返回文本框内容,用于获取输入。setText() 用于设置文本框显示。

Text Edit:多行文本框,输入多行字符串。控件 对象常用函数同Line Edit控件。

Combo Box:下拉框列表。用于输入指定枚举值。

(3)控件按钮,供用户选择与执行

Push Button:命令按钮。常见的确认、取消、关闭等按钮就是这个控件。clicked信号一定要记住。clicked信号就是指鼠标左键按下然后释放时会发送信号,从而触发相应操作。

Radio Button:单选框按钮。

Check Box:多选框按钮。

五、Qt Designer工具实现
了解基本控件及作用和获取输入/显示方法后,就可以开始动手实现小需求了。。比如登录界面。获取用户名和密码并显示。

Step1:
打开主界面,选择Widget模板
在这里插入图片描述
Step2:
从Widget Box工具箱中拖拽3个label、2个line Edit、2个Push Button、1个Combo Box以及1个Text Browser。拖完后如下:
在这里插入图片描述
Step3:
双击各个控件,修改控件名称(对应属性编辑区中的text,可直接双击控件修改)以及对象名称(对应属性编辑区中的objectName)。对象名称一定记得修改。默认生成的label_1、label_2这种名称无法直接判断到底是对应哪个控件。。
在这里插入图片描述
点击菜单栏Form - Prview。预览界面实现效果
在这里插入图片描述
login.ui的程序代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>login</class>
 <widget class="QDialog" name="login">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>402</width>
    <height>335</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>用户登录</string>
  </property>
  <widget class="QComboBox" name="type_comboBox">
   <property name="geometry">
    <rect>
     <x>130</x>
     <y>16</y>
     <width>69</width>
     <height>22</height>
    </rect>
   </property>
   <item>
    <property name="text">
     <string>全部</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>1</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>2</string>
    </property>
   </item>
   <item>
    <property name="text">
     <string>3</string>
    </property>
   </item>
  </widget>
  <widget class="QLabel" name="un_label">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>52</y>
     <width>54</width>
     <height>12</height>
    </rect>
   </property>
   <property name="text">
    <string>用户名</string>
   </property>
  </widget>
  <widget class="QLabel" name="pw_label">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>82</y>
     <width>54</width>
     <height>12</height>
    </rect>
   </property>
   <property name="text">
    <string>密码</string>
   </property>
  </widget>
  <widget class="QLineEdit" name="pw_lineEdit">
   <property name="geometry">
    <rect>
     <x>129</x>
     <y>77</y>
     <width>113</width>
     <height>20</height>
    </rect>
   </property>
  </widget>
  <widget class="QLabel" name="type_label">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>21</y>
     <width>54</width>
     <height>12</height>
    </rect>
   </property>
   <property name="text">
    <string>类型</string>
   </property>
  </widget>
  <widget class="QLineEdit" name="un_lineEdit">
   <property name="geometry">
    <rect>
     <x>129</x>
     <y>47</y>
     <width>113</width>
     <height>20</height>
    </rect>
   </property>
  </widget>
  <widget class="QPushButton" name="login_pushButton">
   <property name="geometry">
    <rect>
     <x>42</x>
     <y>290</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>登录</string>
   </property>
  </widget>
  <widget class="QPushButton" name="cancel_pushButton">
   <property name="geometry">
    <rect>
     <x>193</x>
     <y>290</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>退出</string>
   </property>
  </widget>
  <widget class="QTextBrowser" name="textBrowser">
   <property name="geometry">
    <rect>
     <x>40</x>
     <y>110</y>
     <width>256</width>
     <height>141</height>
    </rect>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

Step4:
点击File -Save保存实现结果。保存文件名为login.ui。
在这里插入图片描述
Step5:
界面开发完成,将.ui文件转换为.py文件
方法一:右键External Tools–PyUIC或者tools–External Tools–PyUIC
配置过程可点击链接查看详情:Qt Designer工具相关安装配置
在这里插入图片描述
方法二:直接使用命令行转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。

pyuic5 -o login.py login.ui

转换后的.py文件内容如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_login(object):
    def setupUi(self, login):
        login.setObjectName("login")
        login.resize(402, 335)
        self.type_comboBox = QtWidgets.QComboBox(login)
        self.type_comboBox.setGeometry(QtCore.QRect(130, 16, 69, 22))
        self.type_comboBox.setObjectName("type_comboBox")
        self.type_comboBox.addItem("")
        self.type_comboBox.addItem("")
        self.type_comboBox.addItem("")
        self.type_comboBox.addItem("")
        self.un_label = QtWidgets.QLabel(login)
        self.un_label.setGeometry(QtCore.QRect(40, 52, 54, 12))
        self.un_label.setObjectName("un_label")
        self.pw_label = QtWidgets.QLabel(login)
        self.pw_label.setGeometry(QtCore.QRect(40, 82, 54, 12))
        self.pw_label.setObjectName("pw_label")
        self.pw_lineEdit = QtWidgets.QLineEdit(login)
        self.pw_lineEdit.setGeometry(QtCore.QRect(129, 77, 113, 20))
        self.pw_lineEdit.setObjectName("pw_lineEdit")
        self.type_label = QtWidgets.QLabel(login)
        self.type_label.setGeometry(QtCore.QRect(40, 21, 54, 12))
        self.type_label.setObjectName("type_label")
        self.un_lineEdit = QtWidgets.QLineEdit(login)
        self.un_lineEdit.setGeometry(QtCore.QRect(129, 47, 113, 20))
        self.un_lineEdit.setObjectName("un_lineEdit")
        self.login_pushButton = QtWidgets.QPushButton(login)
        self.login_pushButton.setGeometry(QtCore.QRect(42, 290, 75, 23))
        self.login_pushButton.setObjectName("login_pushButton")
        self.cancel_pushButton = QtWidgets.QPushButton(login)
        self.cancel_pushButton.setGeometry(QtCore.QRect(193, 290, 75, 23))
        self.cancel_pushButton.setObjectName("cancel_pushButton")
        self.textBrowser = QtWidgets.QTextBrowser(login)
        self.textBrowser.setGeometry(QtCore.QRect(40, 110, 256, 141))
        self.textBrowser.setObjectName("textBrowser")

        self.retranslateUi(login)
        QtCore.QMetaObject.connectSlotsByName(login)

    def retranslateUi(self, login):
        _translate = QtCore.QCoreApplication.translate
        login.setWindowTitle(_translate("login", "用户登录"))
        self.type_comboBox.setItemText(0, _translate("login", "全部"))
        self.type_comboBox.setItemText(1, _translate("login", "1"))
        self.type_comboBox.setItemText(2, _translate("login", "2"))
        self.type_comboBox.setItemText(3, _translate("login", "3"))
        self.un_label.setText(_translate("login", "用户名"))
        self.pw_label.setText(_translate("login", "密码"))
        self.type_label.setText(_translate("login", "类型"))
        self.login_pushButton.setText(_translate("login", "登录"))
        self.cancel_pushButton.setText(_translate("login", "退出"))

六、界面与业务逻辑分离实现

这一步主要实现业务逻辑,也就是点击登录和退出按钮后程序要执行的操作。为了后续维护方便,采用界面与业务逻辑相分离来实现。也就是通过创建主程序调用界面文件方式实现。这有2个好处。第1就是实现逻辑清晰。第2就是后续如果界面或者逻辑需要变更,好维护。新建call_login.py文件程序,调用login.py文件。

import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from learning.login import Ui_login

class MyMainForm(QMainWindow, Ui_login):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)

if __name__ == "__main__":
    # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyMainForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

运行call_login.py程序,结果如下:
在这里插入图片描述
到这里,界面实现和业务主程序已经写好了。但是现在具体业务功能逻辑还未实现。需要对登录和退出的按钮点击执行相对应的操作。

添加信号和槽,实现业务逻辑
实现部分见代码注释。这里主要添加如下两行命令配置信号和槽的关系。信号和槽的创建和原理下文描述。这里可以参照添加即可。

登录按钮:self.login_Button.clicked.connect(self.display)

退出按钮:self.cancel_Button.clicked.connect(self.close)

详细代码如下:

import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from learning.login import Ui_login


class MyMainForm(QMainWindow, Ui_login):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        # 添加登录按钮信号和槽。注意display函数不加小括号()
        self.login_pushButton.clicked.connect(self.display)
        # 添加退出按钮信号和槽。调用close函数
        self.cancel_pushButton.clicked.connect(self.close)


    def display(self):
        # 利用line Edit控件对象text()函数获取界面输入
        username = self.un_lineEdit.text()
        password = self.pw_lineEdit.text()
        # 利用text Browser控件对象setText()函数设置界面显示
        self.textBrowser.setText("登录成功!\n" + "用户名是: " + username + ",密码是: " + password)

if __name__ == "__main__":
    # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyMainForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

运行结果如下:
在这里插入图片描述
用户登录小程序开发完成。

七、Pyinstaller打包成.exe文件
用户登录显示程序界面和逻辑都实现了。下来就是要推广使用了。不是所有人电脑上都安装有python软件或者对应的python版本以及PyQt5工具。那么如何让程序在这些未安装python软件的机子上运行呢?可以使用pyinstaller工具将程序打包成.exe文件。pyinstaller使用方法可以参考《使用Pyinstaller转换.py文件为.exe可执行程序》。打包过程如下:

方法一:右键External Tools–PyUIC或者tools–External Tools–PyUIC
配置过程可点击链接查看详情:Qt Designer工具相关安装配置

方法二:直接使用命令行生成exe文件

pyinstaller -F call_login.py -w 

打包成功后call_login.exe在当前目录的dist目录下。执行call_login.exe,程序可以正确运行。如下:

在这里插入图片描述
这样,其他人想运行你的程序,直接给他提供call_login.exe文件就可以执行程序了。

小结
本文主要讲述了使用Qt Designer工具实现一个用户登录显示的小需求。通过这个需求可以知道如何使用Qt Designer实现界面开发、.ui文件转换、业务和界面分离实现以及最简单的信号和槽创建。通过这个需求实现过程描述相信你可以参考动手实现你的小需求。起码可以上手实践了。。

Python使用Qt Designer设计GUI可以使开发人员轻松地创建图形用户界面(GUI)。Qt Designer是一个可视化的界面设计工具,能够以可视化方式设计和创建用户界面,与PythonQt库紧密集成。 当我们开始使用PythonQt Designer时,首先要做的是安装和配置必要的软件。我们需要安装PyQt库,它使得Python能够与Qt库进行交互。然后,我们需要安装Qt Designer工具,它用于设计和创建界面。 一旦我们完成了安装和配置,我们可以开始使用Qt Designer创建GUI。这可以通过两种方式完成:通过创建.ui文件或直接在Python使用Qt Designer。 通过创建.ui文件,我们可以在Qt Designer中拖放各种控件,如按钮、文本框和列表框。然后,我们可以设置每个控件的属性,如大小、位置和样式。在设计完成后,我们可以将.ui文件保存到磁盘。这个.ui文件实际上是一个描述界面的XML文件。 在Python使用Qt Designer,首先我们需要将.ui文件转换为Python代码。这可以通过使用PyQt提供的工具pyuic完成,该工具将.ui文件转换为.py文件。然后,我们可以在Python中导入生成的.py文件,并使用它来创建和显示GUI。我们还可以在Python代码中编写事件处理程序,以响应用户界面上的操作。 使用PythonQt Designer设计GUI可以节省开发时间,因为它提供了一个可视化的界面设计工具,使得创建和布局控件变得更加直观和简单。同时,它还允许我们在Python代码中添加功能,以满足更复杂的需求。这种集成的环境使得GUI开发变得更加高效和灵活。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值