delphi gui编辑工具源码_Python 快速构建一个简单的 GUI 应用

 点击上方“AirPython”,选择“加为星标”

第一时间关注 Python 技术干货!

172eafab666dc789ca018f2ebb6d461a.png

1. 介绍

Python GUI 常用的 3 种框架是:Tkinter、wxpython、PyQt5

PyQt5 基于 Qt,是 Python 和 Qt 的结合体,可以用 Python 语言编写跨平台的 GUI 应用程序

相比 Tkiner和 wxpython,PyQt5 利用自带的 Qt Designer 可视化工具进行界面设计,可以非常快速地开发出一款功能强大、界面美观的 GUI 应用程序

2. 安装

以 Mac OSX 为例,PC 下的操作类似。

首先,在系统内部安装 qt 应用

# 安装qt
brew install qt

然后,在 Python 虚拟环境下安装 sip 和 pyqt5 两个依赖库

# 安装依赖sip
pip3 install sip

# 安装依赖pyqt5
pip3 install pyqt5

接着,在 Pycharm 中配置 External Tools,新建 Qt Designer 和 PyUIC 两个命令

# Qt Designer 配置
Program:/usr/local/Cellar/qt/5.14.1/libexec/Designer.app
Working directory:/usr/local/Cellar/qt/5.14.1/libexec

# PyUIC
# Python环境路径
Program:/usr/local/bin/python3.7
# 参数
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py 
# 路径【固定】
Working directory:$ProjectFileDir$

其中,在第一步安装 Qt 应用文件夹下,找到 Designer.app 和 libexec 两个文件,配置进去

5dd640d7d390d2c1013e9e50f8f52c06.png

由于 QtDesigner 生成的文件是 *.ui 文件,需要借助 pyqt5 中的 pyuic,将 ui 文件转换为 Python 文件

7025fc942890bd131d47193e18a9d0c7.png

最后,可以直接在 Pycharm 中快速打开 Designer 界面、ui 转 py 文件这两个操作。

4e3d1cc80701b939b8d46db535574f06.png

3. 常用功能介绍

QtDesigner 是一个非常强大的 GUI 设计工具,生成的文件格式为:*.ui

652a5d5ed0061a339ec63f377e8609cb.png

QtDesigner 主要包含下面 6 部分:

  • 主设计界面区

  • 控件区

  • 控件属性区

  • 信号和槽函数区

  • 资源图片区

  • 控件结构树区

其中,

主设计界面区:用于窗口编辑,最终的 GUI 展示区域

控件区:包含文本、输入框、选择器、容器等控件,可以直接拖拉到窗口进行布局

属性区:用于定义控件的属性,包含:内容、字体大小、宽和高等

信号和槽函数区:可以很方便地为一个控件指定一个事件监听,比如:单击、选中事件等

资源图片区域:用于导入本地的资源文件,在控件中使用,比如:图片

控件结构树区:可以很直观地显示控件间的结构关系

4.来个例子

第 1 步,我们从控件区拖 3 个按钮和 2 个输入框到界面设计区域

5ada3659e11ff489ebec8dafe325bddb.png

第 2 步,选中控件,鼠标右键为控件新增属性,比如:控件内容、控件名称(相当于id),对于一些复杂的属性设置,需要在属性区域单独进行设置

编辑完 UI 界面之后,会在本地生成一个 *.ui 的文件

527997191b0cf0b387e9bd107b41b2d5.png

第 3 步,选择 *.ui 文件,在 Pycharm 中使用 PyUIC 命令,将 ui 文件转换为 py 文件

# ui文件转为py文件
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 790)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 80, 111, 41))
        self.pushButton.setObjectName("pushButton")
        self.username = QtWidgets.QLineEdit(self.centralwidget)
        self.username.setGeometry(QtCore.QRect(260, 80, 271, 41))
        self.username.setObjectName("username")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 150, 111, 41))
        self.pushButton_2.setObjectName("pushButton_2")
        self.password = QtWidgets.QLineEdit(self.centralwidget)
        self.password.setGeometry(QtCore.QRect(260, 150, 271, 41))
        self.password.setObjectName("password")
        self.login = QtWidgets.QPushButton(self.centralwidget)
        self.login.setGeometry(QtCore.QRect(260, 230, 141, 61))
        self.login.setObjectName("login")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "用户名:"))
        self.pushButton_2.setText(_translate("MainWindow", "密码:"))
        self.login.setText(_translate("MainWindow", "登录"))

第 4 步,为按钮添加点击事件

使用 控件名.信号.connect(槽函数) 的形式,为控件添加一个点击事件的监听

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        # 为登录按钮指定事件
        # clicked:信号,login_met:槽函数
        self.login.clicked.connect(self.login_met)

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

    def login_met(self):
        """
        登录事件(槽函数)
        :return:
        """
        # 用户名输入框的内容
        username = self.login.text()
        # 密码输入框的内容
        password = self.password.text()

        print("输入的用户名是:", username, "密码是:", password)

第 5 步,展示界面

最后,新建一个 py 文件,实例化一个 QApplication 对象,将上面创建的 MainWindow 展示出来即可。

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow

# 界面文件
from temp import *


class CustomUI(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CustomUI, self).__init__(parent)
        self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    cutomUI = CustomUI()
    cutomUI.show()
    sys.exit(app.exec_())

需要注意的是,这部分内容仅仅是调用显示 GUI 界面的逻辑,实际项目开发过程中很少变动。

4cff2830597c53f57fe155d21df1dd93.png

5.总结

通过上面的例子发现,使用 PyQt5 构建 GUI 真的很方便,大部分的工作都可以在 QtDesigner 设计完成,然后回归到 Pycharm中,转为 py 文件、编写信号和槽函数,就能快速开发 GUI 图形用户界面。

我已经将全部源码上传到后台,关注公众号后回复「 PyQt5 」即可获得全部源码。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python入门级教学之(Python中的输出函数)

print()函数 括号内容可以是数字、字符串、含有运算符的表达式 输出的目的地是显示器、文件 输出的形式是换行、不换行 代码演示: # 项目负责人: LBJ # 开发日期:2021/3/16 20:36# 输出数字、字符串、运算表达式 print(123) print("123") pri…

submlime text写java_在Sublime Text 3中配置编译和运行Java程序

1.设置java的PATH环境变量2.创建批处理或Shell脚本文件要想编译运行Java程序,需要创建一个批处理或者Shell脚本Windows:runJava.bat:echo offcd %~dp1echo Compiling %~nx1......if exist %~n1.class (del %~n1.class)javac %~nx1if exist %~n1.class (e…

processing创意图形代码_2020年外贸B2C店铺的黑色星期五创意营销想法(下)

10.外贸B2C店铺黑色星期五创意营销理念——创建促销内容日历随着黑色星期五的临近,您将希望巩固自己的整体策略。伟大的第一步是创建一个内容日历,其中要共享什么资产和内容以及何时共享。计划提前一个月计划,并在黑色星期五的一周开始促销活…

Python入门教学之(转义字符与原字符)

转义字符: \想要转义功能的首小写字母 例如: 换行 \n print("hello\nworld") 占位符 \t(占用4个字符) print("hello\tworld") # 由于前面字符占位是5个字符位,后面占位符就占3个字符位 print(…

vi编辑器 末尾添加_vim编辑器

1. 关于Vimvim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想…

python 识别图形验证码_Python验证码识别

大致介绍在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类:1、计算验证码2、滑块验证码3、识图验证码4、语音验证码这篇博客主要写的就是识图验证码,识别的是简单的验证码,要想让识别…

Python入门教学之(标识符和保留字)

1、查看Python的所有关键字 import keyword print(keyword.kwlist) 结果: [False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not,…

sequelize 外键关联_mysql – Sequelize.js外键

在我有同样的问题之前,当我了解设置功能的时候,解决了.开门见山!假设我们有两个对象:人与父亲var Person sequelize.define(Person, {name: Sequelize.STRING});var Father sequelize.define(Father, {age: Sequelize.STRING,//The magic start herepe…

pep8 python 编码规范_实用的python编码规范

编码规范在程序开发中是一项很重要要求,良好的编码规范对程序的可读性、代码的可维护性都有很大的提高,从而提高开发效率。下面总结了python中一些实用的开发规范,供大家借鉴和参考。1.每行不超过80个字符每行代码太长既不美观也影响可读性&a…

JAVA进阶教学之(产生随机数)

import java.util.Random;代码演示: package com.lbj.javase.random;import java.util.Random;public class RandomTest01 {public static void main(String[] args) {//创建随机数对象Random randomnew Random();int num1random.nextInt();System.out.println(num…

python中char的用法_如何从C++返回char **并使用cType在Python中填充它?

我一直试图从C返回一个字符串数组到Python,如下:// c codeextern "C" char** queryTree(char* treename, float rad, int kn, char*name, char *hash){//.... bunch of other manipulation using parameters...int nbr 3; // number of strin…

python txt转json_实战篇 | 用Python来找你喜欢的妹子(二)

用Python做有趣的事情最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.爬虫篇:使用Python动态爬取某大V微博,再用词…

yoga710怎么进入bios_【解读YOGA——BIOS篇】找回消失掉的BIOS,YOGA BIOS详解!

本帖最后由 Harrisheagle 于 2012-11-1 09:51 编辑相信每位机油在拿到新本本的时候,都有开机进入BIOS逛一逛的习惯。这个我也不例外,拿到YOGA的那一刻,我就迫不及待地想看看这款如此特别的YOGA,究竟它的BIOS会给我带来什么惊喜呢&…

JAVA进阶教学之(Enum枚举类)

首先,我们为什么要学习Enum枚举类 我们引入一段代码: package com.lbj.javase.enumTest;public class EnumTest01 {public static void main(String[] args) {int retValuedivide(10,2);System.out.println(retValue);int retValue2divide(10,0);Syste…

python中的get函数_python之函数用法get()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法get() #http://www.runoob.com/python/att-dictionary-get.html #dict.get(key, defaultNone) #说明:返回指定键的值,如果值不在字典中返回默认值. #key:要查找的键 #default:如果指定键…

vscode生成vue模板快捷键_VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法...

1. 安装一个插件,识别vue文件2.新建代码片段文件–>首选项–>用户代码片段–>点击新建代码片段–取名vue.json 确定3.粘贴入自己写的.vue模板{"Print to console": {"prefix": "vue","body": ["","…

Exception in thread “main“ java.io.FileNotFoundException: C:\Temp (拒绝访问。)

Exception in thread "main" java.io.FileNotFoundException: C:\Temp (拒绝访问。) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.FileInputStream.<init>(FileInput…

linux 切换root账号_Linux 服务器的安全保障,看看这些

作为一种开放源代码的操作系统&#xff0c;Linux 服务器以其安全&#xff0c;高效和稳定的显著优势而得以广泛应用&#xff0c;但是&#xff0c;若不加以控制&#xff0c;也不见得安全到哪里&#xff0c;这篇博文主要从账号安全控制、系统引导和登录控制的角度&#xff0c;来进…

打印纸张尺寸换算_纸张尺寸与开(K)数换算

开本按照尺寸的大小&#xff0c;通常分三种类型&#xff1a;大型开本、中型开本和小型开本。以7871092的纸来说&#xff0c;12开以上为大型开本&#xff0c;16&#xff5e;36开为中型开本&#xff0c;40开以下为小型开本&#xff0c;但以文字为主的书籍一般为中型开本。开本形状…

JAVA进阶开发之(异常类)

保姆级别的异常类教学&#xff08;附代码&#xff09; 目录 1、什么是异常&#xff1a; 2、 java语言中异常以什么形式存在的呢&#xff1f; 3、异常对应的现实生活中是怎样的&#xff1f; 4、异常处理机制 5、异常处理的具体方式 6、运行时异常编写程序时可以不处理 7…