PyQt 图解Qt Designer工具的使用方法

前言

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

开发工具版本

pyhton3.7.4 + PyQt 5.11.2

Qt Designer工具主界面

打开路径:${python安装目录}/Lib/site-packages/pyqt5_tools/designer.exe。主界面如下:

1

主界面不同区域介绍:

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

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

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

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

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

Qt Designer基本控件介绍

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

2

(1)显示控件。

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

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

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

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

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

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

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

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

Radio Button:单选框按钮。

Check Box:多选框按钮。

3

Qt Designer工具实现

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

打开Qt Designer,开始拖拽控件实现吧。。

Step1:打开主界面,选择Widget模板

4

Step2:从Widget Box工具箱中拖拽2个label、2个line Edit、2个Push Button以及1个Text Browser。拖完后如下:

5

Step3:双击各个控件,修改控件名称(对应属性编辑区中的text,可直接双击控件修改)以及对象名称(对应属性编辑区中的objectName)。对象名称一定记得修改。默认生成的label_1、label_2这种名称无法直接判断到底是对应哪个控件。。

6

点击菜单栏Form - Prview。预览界面实现效果

7

login.ui的程序代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
 <property name="geometry">
  <rect>
  <x>0</x>
  <y>0</y>
  <width>549</width>
  <height>199</height>
  </rect>
 </property>
 <property name="windowTitle">
  <string>用户登录</string>
 </property>
 <widget class="QLabel" name="user_label">
  <property name="geometry">
  <rect>
   <x>50</x>
   <y>40</y>
   <width>61</width>
   <height>21</height>
  </rect>
  </property>
  <property name="text">
  <string>用户名</string>
  </property>
 </widget>
 <widget class="QLineEdit" name="user_lineEdit">
  <property name="geometry">
  <rect>
   <x>130</x>
   <y>40</y>
   <width>113</width>
   <height>20</height>
  </rect>
  </property>
 </widget>
 <widget class="QLabel" name="pwd_label">
  <property name="geometry">
  <rect>
   <x>50</x>
   <y>80</y>
   <width>54</width>
   <height>12</height>
  </rect>
  </property>
  <property name="text">
  <string>密码</string>
  </property>
 </widget>
 <widget class="QLineEdit" name="pwd_lineEdit">
  <property name="geometry">
  <rect>
   <x>130</x>
   <y>70</y>
   <width>113</width>
   <height>20</height>
  </rect>
  </property>
 </widget>
 <widget class="QPushButton" name="login_Button">
  <property name="geometry">
  <rect>
   <x>50</x>
   <y>110</y>
   <width>75</width>
   <height>23</height>
  </rect>
  </property>
  <property name="text">
  <string>登录</string>
  </property>
 </widget>
 <widget class="QPushButton" name="cancel_Button">
  <property name="geometry">
  <rect>
   <x>160</x>
   <y>110</y>
   <width>75</width>
   <height>23</height>
  </rect>
  </property>
  <property name="text">
  <string>退出</string>
  </property>
 </widget>
 <widget class="QTextBrowser" name="user_textBrowser">
  <property name="geometry">
  <rect>
   <x>270</x>
   <y>30</y>
   <width>221</width>
   <height>101</height>
  </rect>
  </property>
 </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

Step4:点击File -Save保存实现结果。保存文件名为login.ui。

8

Step5:界面开发完成。

将.ui文件转换为.py文件

使用命令行pyuic5 -o login.py login.ui转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。执行结果如下

9

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

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
  def setupUi(self, Form):
    Form.setObjectName("Form")
    Form.resize(549, 199)
    self.user_label = QtWidgets.QLabel(Form)
    self.user_label.setGeometry(QtCore.QRect(50, 40, 61, 21))
    self.user_label.setObjectName("user_label")
    self.user_lineEdit = QtWidgets.QLineEdit(Form)
    self.user_lineEdit.setGeometry(QtCore.QRect(130, 40, 113, 20))
    self.user_lineEdit.setObjectName("user_lineEdit")
    self.pwd_label = QtWidgets.QLabel(Form)
    self.pwd_label.setGeometry(QtCore.QRect(50, 80, 54, 12))
    self.pwd_label.setObjectName("pwd_label")
    self.pwd_lineEdit = QtWidgets.QLineEdit(Form)
    self.pwd_lineEdit.setGeometry(QtCore.QRect(130, 70, 113, 20))
    self.pwd_lineEdit.setObjectName("pwd_lineEdit")
    self.login_Button = QtWidgets.QPushButton(Form)
    self.login_Button.setGeometry(QtCore.QRect(50, 110, 75, 23))
    self.login_Button.setObjectName("login_Button")
    self.cancel_Button = QtWidgets.QPushButton(Form)
    self.cancel_Button.setGeometry(QtCore.QRect(160, 110, 75, 23))
    self.cancel_Button.setObjectName("cancel_Button")
    self.user_textBrowser = QtWidgets.QTextBrowser(Form)
    self.user_textBrowser.setGeometry(QtCore.QRect(270, 30, 221, 101))
    self.user_textBrowser.setObjectName("user_textBrowser")

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

  def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(_translate("Form", "用户登录"))
    self.user_label.setText(_translate("Form", "用户名"))
    self.pwd_label.setText(_translate("Form", "密码"))
    self.login_Button.setText(_translate("Form", "登录"))
    self.cancel_Button.setText(_translate("Form", "退出"))

界面与业务逻辑分离实现

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

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
#导入designer工具生成的login模块
from login import Ui_Form

class MyMainForm(QMainWindow, Ui_Form):
  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程序,结果如下:

10

到这里,界面实现和业务主程序已经写好了。但是现在具体业务功能逻辑还未实现。需要对登录和退出的按钮点击执行相对应的操作。

添加信号和槽,实现业务逻辑

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

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

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

详细代码如下:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
#导入designer工具生成的login模块
from login import Ui_Form
class MyMainForm(QMainWindow, Ui_Form):
  def __init__(self, parent=None):
    super(MyMainForm, self).__init__(parent)
    self.setupUi(self)
    #添加登录按钮信号和槽。注意display函数不加小括号()
    self.login_Button.clicked.connect(self.display)
    #添加退出按钮信号和槽。调用close函数
    self.cancel_Button.clicked.connect(self.close)
  def display(self):
    #利用line Edit控件对象text()函数获取界面输入
    username = self.user_lineEdit.text()
    password = self.pwd_lineEdit.text()
    #利用text Browser控件对象setText()函数设置界面显示
    self.user_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_())

运行结果如下:

11

用户登录小程序开发完成。但是这个界面还有一个小问题,就是拖动的时候,界面会变形。。看图

12

是不是觉得不可忍受。。有两个办法,一种是界面点击使用网格布局,一种是使界面大小不可改变。这里介绍第二种方法。在Qt Designer上修改主界面最大属性中的长宽设置成与最小属性一致。如下:

13

这样设置之后,就不允许在窗口左右两边拖动导致界面改变大小,就可以保证主界面中的控件不会变形。

Pyinstaller打包成.exe文件

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

pyinstaller.exe -F call_login.py -w

14

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

15

这样,其他人想运行你的程序,就可以直接给他提供call_login.exe可执行过程序了。

小结

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

实际上这个程序还有很多小问题。。因为用户登录界面控件少,所以没有感觉出来。。就是控件布局管理。就是如何让界面上的控件整齐有序、布局合理美观。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    1. 用qt designer编写主窗体,窗体类型是MainWindow,空白窗口上一个按钮.并转换成mainWindow.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'f.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost!

  • Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法

    1.先使用Qt designer设计两个窗口,一个是主窗口,一个是子窗口   其中主窗口是新建-Main Window,子窗口是Dialog窗体. 两个窗口不能是同一类型,否则会崩溃. 并保存为EyeTracking_main.ui和EyeTracking_process.ui(因为我在做眼动追踪,因此窗体命名与此相关,后同),使用UIC工具转成.py文件. 2.写一个驱动函数调用两个窗体 主窗体Eyetracking_main.py from PyQt5 import QtCore, QtGu

  • python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序

    本文通过Python3+PyQt5实现<python Qt Gui 快速编程>这本书的page Designer应用程序,采用QGraphicsView,QGraphicsScene,QGraphicsItem,这个程序包含有多个文本,图片和框的页面.有些图形类在PyQt5已过时,所以本代码改动幅度比较大.主要的类或方法的改变如下: QMatrix==>QTransform setMatrix==>setTransform rotate ==> setRotation 本例中

  • pyqt5利用pyqtDesigner实现登录界面

    本文实例为大家分享了pyqt5利用pyqtDesigner实现登录界面的具体代码,供大家参考,具体内容如下 为便于操作 界面和逻辑分离 逻辑类: import sys import pymysql from loginUI import * //导入 from PyQt5.QtWidgets import * from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import * from PyQt5.QtGui import

  • python3+PyQt5+Qt Designer实现扩展对话框

    本文是对<Python Qt GUI快速编程>的第9章的扩展对话框例子Find and replace用Python3+PyQt5+Qt Designer进行改写. 第一部分无借用Qt Designer,完全用代码实现. 第二部分则借用Qt Designer,快速实现. 第一部分: import sys from PyQt5.QtCore import Qt,pyqtSignal from PyQt5.QtWidgets import (QApplication, QCheckBox, QDi

  • python3+PyQt5+Qt Designer实现堆叠窗口部件

    本文是对<Python Qt GUI快速编程>的第9章的堆叠窗口例子Vehicle Rental用Python3+PyQt5+Qt Designer进行改写. 第一部分无借用Qt Designer,完全用代码实现. 第二部分则借用Qt Designer,快速实现. 第一部分: import sys from PyQt5.QtCore import (Qt) from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QDialo

  • PyQt 图解Qt Designer工具的使用方法

    前言 Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用.本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法. 开发工具版本 pyhton3.7.4 + PyQt 5.11.2 Qt Designer工具主界面 打开路径:${python安装目录}/Lib/site-packages/pyqt5_tools/designer.exe

  • PyQt Qt Designer工具的布局管理详解

    前言 这节课很重要..界面整洁美观与否就看布局了..这里讲布局方法,至于设计的天赋与最终界面的美感那就看造化了.. 本文主要讲述Qt Designer工具实现界面控件布局管理,就是排列组合控件.包括水平布局.垂直布局.网格布局.表单布局.至于绝对布局太复杂..短期内hold不住 布局管理打开方法 方法一:Qt Designer -> Form菜单栏 方法二:右键单击主窗口 -> Lay out 四种布局管理介绍 (1)水平布局 Lay Out Horizontally:被选中的控件在水平方向上

  • Qt Designer的简单使用方法

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用 C++ 代码编写的.窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了. 用 C++ 代码编写图形界面的问题就是不直观,因此 Qt 项目开发了专门的可视化图形界面编辑器--Qt Designer(Qt 设计师).通过 Qt Designer 就可以很方便地创建图形界面文件 *.ui ,然后将 ui 文件应用到源代码里面,做到"所见即所得",大大方便了图形界面的设计. 本节就演示一下

  • python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法

    PyQt5 Qt Designer (Qt设计师) PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C++开发, 并且跨平台. PyQt双许可证, 要么选择GPL(自由软件协议)将代码开源, 要么选择商业许可交商业许可费. PySide拥有LGPL 2.1授权许可, 可开发 免费开源软件 和 私有商业软件. 把PyQt5代码切换到PySide2代码是相当容易的, 这也是为什么选择学习PyQt5的原因 准备工作 安装PyQt5: pip i

  • PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解

    摘要:Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合.这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括.PyQt5.P y Q t 5 tools的依赖包安装和Q t Designer.P y U I C.  PyRcc三个工具的设置.最后简单演示了PyQt5的调用方式及三个工具的使用方法,其目录如下: 前言 很多情况下需要为程序设计一个GUI界面,在Python中使用较多的

  • python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例

    在下面这3篇文章中我们给出了手工输入代码的信号与槽的使用方法,因为采用这种方法介绍时,会简单一些,如果使用Qt Designer来介绍这些功能,那么任何一个简单的功能都会使用xxxx.ui xxxx.py call_xxxx.py三个文件 来实现,这样内容会显得很乱 python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例 python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例 python GUI库图形界面开发之PyQt5信号与槽的高级

  • python使用pyqt写带界面工具的示例代码

    上篇介绍的使用python自带tkinter包,来写带界面的工具. 此篇介绍使用pyqt来开发测试工具. tkinter的好处是python官方自带,上手容易(但手写控件复杂),布局和摆放都不直观和容易,因为是像素坐标定位,需要花较长时间在界面开发上.pyqt是第三方gui开发工具,是目前公认的python上最好的客户端界面开发工具,因为控件是通过qt设计师的手动拖拽,调整颜色 字体 大小等样式也很简单,不需要去代码层面来写大量界面代码,真正的所见即所得. 学习pyqt需要安装这些文件,pyqt

  • PyQT5速成教程之Qt Designer介绍与入门

    Qt Designer的介绍 在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成.Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷.Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果.Qt Designer生成的.ui文件(实质上是XML格式的文件)也可以通过pyuic5工具转换成.py文件. Qt Designer随PyQt5-tools包一起安装,其安装路径在 "Python

  • PyQt5 关于Qt Designer的初步应用和打包过程详解

    目录 Qt Designer的介绍 1. 缘由 2. 搭建 2.1. 安装 2.2. 打开 2.3. 设计 2.4. 转换 3. 效果 3.1. 引用 3.2. 启动 3.3. 打包 3.4. 触发 Qt Designer的介绍 在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成.Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷.Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果

  • PyCharm+Qt Designer+PyUIC安装配置教程详解

    Qt Designer用于像VC++的MFC一样拖放.设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们只需要安装PyQt5塻块然后再指定Qt Designer和PyUIC即可 为了避免篇幅过长,本文只讲安装配置,使用可查看"PyCharm+QTDesigner+PyUIC使用教程" 一.安装PyQt5 Qt Designer包含在PyQt5中,而PyQt5就是一个python模块,所以我们

随机推荐