PyQt5编程基础 2.1 GUI程序的基本框架

news/2024/11/22 20:41:35/

文章目录

创建纯代码GUI程序 

创建目录

新建程序

创建GUI程序的基本过程(代码分析)

导入模块

创建应用程序

创建窗体

使用窗体类的GUI程序框架

创建项目目录

窗体设计

修改窗体的windowTitle

放一个label

放一个Push Button

保存窗体

代码设计

将QtApp中的ui文件复制到项目目录

添加Form

编译form

打开代码编辑器

使用单继承方式调用这个窗体类

新建一个appMain.py文件

实现信号与槽函数的关联

Qt Creator中找函数名

在py文件中关联信号与槽函数

运行appMain


创建纯代码GUI程序 

创建目录

创建目录e:\baikejia\bkj2-1

新建程序

打开Eric6,File->New,保存为bkj2-1.py

输入如下代码

## 使用PyQt5,纯代码创建一个简单的GUI程序import sysfrom PyQt5 import QtCore, QtGui, QtWidgets  #导入PyQt5包中的几个模块app = QtWidgets.QApplication(sys.argv)      #创建App,用QApplication类widgetHello = QtWidgets.QWidget()      #创建一个窗体widgetHello,用QWidget类
widgetHello.resize(400,150)            #设置对话框的宽度和高度
widgetHello.setWindowTitle("bkj2-1")  #设置对话框的标题文字LabHello = QtWidgets.QLabel(widgetHello)  #创建一个标签LabHello,父容器为widgetHello
LabHello.setText("Hello, Welcome to PyQt5")    #设置标签文字font = QtGui.QFont()    #创建字体对象font,用QFont类
font.setPointSize(12)   #设置字体大小
font.setBold(True)      #设置为粗体
LabHello.setFont(font)  #设置为标签LabHello的字体size=LabHello.sizeHint()    #获取LabHello的合适大小,返回值aLabSize是QSize类对象LabHello.setGeometry(70, 60, size.width(), size.height())
##设置LabHello的位置和大小,位置x=70,y=60, 宽度和高度由aLabSize的值确定widgetHello.show()      #显示对话框sys.exit(app.exec_())   #应用程序运行

 运行程序

创建GUI程序的基本过程(代码分析)

从bkj2-1的程序来分析

导入模块

 

创建应用程序

用到了QtWidgets模块中的QApplication类。这个类是管理GUI应用程序的控制流程和设置的类

创建窗体

创建窗体,设置窗体参数

创建界面组件

窗体显示

运行程序

使用窗体类的GUI程序框架

使用第一次实训中创建的类Ui_FormHello来构建GUI应用程序

创建项目目录

e:\baikejia\bkj2-2

 

 新建Eric6项目

 

建好后,应该是这样

新建一个Qt项目QtApp

类名命名为FormHi,注意Base class选择QWidget

窗体设计

修改窗体的windowTitle

可以把鼠标放到窗体右下角,光标会变成箭头,移动箭头可以改变窗体大小

放一个label

命名为LabHi

设置text属性

改一下字体,让它好看些

改一下对齐格式

完成后,窗体应该是这样的

放一个Push Button

命名为btnClose,text设置为“关闭”,修改font让它好看

 

保存窗体

窗体设计完成

代码设计

将QtApp中的ui文件复制到项目目录

 

添加Form

点击Forms

点右键

选择Add Forms,将form加进去

编译form

右键点ui文件,选择compile form

编译完,点回sources

会发现ui文件编译后的py文件已经生成了

打开代码编辑器

双击py文件,可看到文件的内容

试着直接运行 

运行结果

这时,按关闭按钮无反应,因为还没有代码

使用单继承方式调用这个窗体类

新建一个appMain.py文件

输入如下内容

import sys
sys.path.append("E:\baikejia\bkj2-2")from PyQt5.QtWidgets import  QWidget, QApplicationfrom Ui_FormHi import Ui_FormHiclass QmyWidget(QWidget): def __init__(self, parent=None):super().__init__(parent)   #调用父类构造函数,创建QWidget窗口self.__ui=Ui_FormHi()   #创建UI对象self.__ui.setupUi(self)    #构造UI界面self.Lab="新标签"self.__ui.LabHi.setText(self.Lab)def setBtnText(self, aText):self.__ui.btnClose.setText(aText)if  __name__ == "__main__":app = QApplication(sys.argv)   #创建App,用QApplication类myWidget=QmyWidget()myWidget.show()myWidget.setBtnText("新名称")sys.exit(app.exec_())

 运行appMain

这时候点击按钮没有反应,应为没有代码

实现信号与槽函数的关联

Qt Creator中找函数名

Qt Creator编辑器里面,左键选中按钮,点击右键,点击转到槽

 

选择clicked()

自动弹出FormHi.cpp窗口,复制函数名 

在Qt Creator中无需输入代码,转入Eric6

py文件中关联信号与槽函数

在Ui_FormHi.py的SetUi函数的最后添加一行代码

 

这段代码的作用是把btnClose按钮的clicked()信号与FormHi的close()槽函数关联起来。这样按下按钮,相当于告诉它要关闭

运行appMain

按下按钮,窗口关闭


http://www.ppmy.cn/news/21111.html

相关文章

图例legend语法及设置

(1)设置图例位置 使用loc参数 plt.legend(loc‘lower left’) 0‘best’1‘upper right’2‘upper left’3‘lower left’4‘lower right’5‘right’6‘center left’7‘center right’8‘lower center’9‘upper center’10‘center’ (2)设置图例字体 #设置字体大小 fontsi…

如果把小程序业务和研发管理都放到一个平台

伴随着互联网在中国进程的发展,线上研发效能及业务应用软件也不落后于时代进步的脚步,中国软件行业从未停止过持续的创新。 2022年,业务应用开发正在简化,研发效能也在提升,其中不得不提软件在协同促进、研发一体化管…

网络攻击(Cyber Attacks,也称赛博攻击)

网络攻击(Cyber Attacks,也称赛博攻击)是指针对计算机信息系统、基础设施、计算机网络或个人计算机设备的,任何类型的进攻动作。对于计算机和计算机网络来说,破坏、揭露、修改、使软件或服务失去功能、在没有得到授权的…

【数据结构】动图详解单向链表

目录 1.什么是链表 1.问题引入 2. 链表的概念及结构 3. 问题解决 2.单向链表接口的实现 1.接口1,2---头插,尾插 2. 接口3,4---头删,尾删 3. 接口5---查找 4. 接口6,7---插入,删除 5. 接口8---打印 6. 注意…

【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、介绍UniRx插件 UniRx是一种基于Unity3D的…

文本数据预处理:可能需要关注这些点

文章目录1、文本数据获取2、常规文本数据预处理2.1 将文本数据清洗干净2.2 将文本数据格式化3、任务相关的文本数据预处理3.1 不平衡问题3.2 数据增强问题3.3 数据标注问题4、一些可用的文本预处理工具5、总结本文关键词: 文本数据预处理、中文文本预处理、自然语言…

TOGAF概述

TOGAF主要分为8个元素:念、法、技、导、行、连、考、能 念--概念阐述 法--架构开发方法 技--32个最佳实践技术 导--4种向导 行--架构内容框架 连--企业连续系列 考--参考成熟架构资产 能--架构工作能力

【C语言练习】逻辑分析题

目录题目一:求名次题目详情:解题思路:题目二:找凶手题目详情:解题思路:题目一:求名次 题目详情: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A…