当前位置: 首页 > news >正文

【附源码】Python :PYQT界面点击按钮随机变色

系列文章目录

Python 界面学习:PYQT界面点击按钮随机变色


文章目录

  • 系列文章目录
  • 一、项目需求
  • 二、源代码
  • 三、代码分析
      • 3.1 导入模块:
      • 3.2 定义App类:
      • 3.3 构造函数:
      • 3.4 初始化用户界面:
      • 3.5 设置窗口属性:
      • 3.6 创建按钮:
      • 3.7 创建标签:
      • 3.8 设置按钮和标签的样式:
      • 3.9 changeColor方法:
      • 3.10 getColor方法:
      • 3.11 主程序:
  • 四、效果展示
  • 总结


一、项目需求

写一个pyqt界面,要求界面有一个按钮,每次点击这个按钮,就会生成一个10以内的随机数,并且每种水技术对应一种颜色,当随机数出现的时候,界面底色要变成对应的颜色,同时要求随机数会在界面中展示出来,并且按钮和数字的颜色不会改变



二、源代码

代码如下:

import sys
import random
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColorclass App(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('随机数颜色变化展示')# 设置窗口的初始大小self.setGeometry(100, 100, 350, 250)# 创建按钮并设置点击事件self.button = QPushButton('生成随机数', self)self.button.clicked.connect(self.changeColor)self.button.setGeometry(100, 50, 150, 40)  # 设置按钮的位置和大小# 创建标签用于显示随机数self.label = QLabel('点击按钮生成随机数', self)self.label.setGeometry(100, 110, 150, 30)  # 设置标签的位置和大小self.label.setAlignment(Qt.AlignCenter)  # 文本居中# 设置按钮和标签的初始颜色self.button.setStyleSheet("color: white; background-color: black;")self.label.setStyleSheet("color: black;")def changeColor(self):# 生成随机数num = random.randint(0, 9)# 根据随机数选择颜色color_name = self.getColor(num)# 设置窗口的背景颜色self.setStyleSheet(f"background-color: {color_name};")# 更新标签显示的随机数self.label.setText(f'随机数: {num}')def getColor(self, num):# 定义颜色映射colors = {0: 'red',1: 'green',2: 'blue',3: 'yellow',4: 'magenta',5: 'darkred',6: 'darkgreen',7: 'darkblue',8: 'darkmagenta',9: 'cyan'}return colors.get(num, 'lightgray')  # 默认颜色为浅灰色if __name__ == '__main__':app = QApplication(sys.argv)ex = App()ex.show()sys.exit(app.exec_())

三、代码分析

3.1 导入模块:

import sys:导入Python的系统模块,通常用于访问命令行参数或退出程序。

import random:导入Python的随机数生成模块,用于生成随机数。

from PyQt5.QtWidgets import …:从PyQt5的QtWidgets模块导入所需的QWidget、QPushButton、QLabel等组件。

from PyQt5.QtCore import Qt:从QtCore模块导入Qt命名空间,它包含了Qt的一些基本功能,如信号和槽机制。

from PyQt5.QtGui import QColor:从QtGui模块导入QColor类,用于颜色的表示。

3.2 定义App类:

class App(QWidget):定义了一个名为App的类,它继承自QWidget,表示应用程序的主窗口。

3.3 构造函数:

def init(self):构造函数,用于初始化App类的对象。

super().init():调用父类QWidget的构造函数。

self.initUI():调用initUI方法来设置用户界面。

3.4 初始化用户界面:

def initUI(self):定义了initUI方法,用于初始化窗口的标题、大小、按钮和标签。

3.5 设置窗口属性:

self.setWindowTitle(‘随机数颜色变化展示’):设置窗口的标题。

self.setGeometry(100, 100, 350, 250):设置窗口的位置和大小。

3.6 创建按钮:

self.button = QPushButton(‘生成随机数’, self):创建一个按钮,文本为“生成随机数”。

self.button.clicked.connect(self.changeColor):为按钮的点击事件连接到changeColor方法。

self.button.setGeometry(100, 50, 150, 40):设置按钮的位置和大小。

3.7 创建标签:

self.label = QLabel(‘点击按钮生成随机数’, self):创建一个标签,初始文本为“点击按钮生成随机数”。

self.label.setGeometry(100, 110, 150, 30):设置标签的位置和大小。

self.label.setAlignment(Qt.AlignCenter):设置标签文本居中显示。

3.8 设置按钮和标签的样式:

使用setStyleSheet方法设置按钮和标签的样式,包括颜色和背景色。

3.9 changeColor方法:

def changeColor(self):定义了changeColor方法,用于在按钮点击时执行。

num = random.randint(0, 9):生成一个0到9之间的随机整数。

color_name = self.getColor(num):调用getColor方法获取与随机数对应的颜色名称。

self.setStyleSheet(f"background-color: {color_name};"):设置窗口的背景颜色。

self.label.setText(f’随机数: {num}'):更新标签文本,显示生成的随机数。

3.10 getColor方法:

def getColor(self, num):定义了getColor方法,用于根据随机数返回对应的颜色名称。

使用一个字典colors来映射数字到颜色名称。

return colors.get(num, ‘lightgray’):返回与数字对应的颜色,如果没有对应的颜色,则返回默认颜色’lightgray’。

3.11 主程序:

if name == ‘main’::Python的常规用法,用于判断是否作为主程序运行。

app = QApplication(sys.argv):创建一个QApplication对象,初始化应用程序。

ex = App():创建App类的一个实例。

ex.show():显示窗口。

sys.exit(app.exec_()):进入应用程序的主事件循环,程序会在这里等待用户操作直到退出。


四、效果展示

初始化
随机数3
随机数9


总结

以上代码实现了一个简单的GUI应用程序,用户可以通过点击按钮生成一个随机数,并在界面上显示这个随机数,同时窗口的背景颜色会根据这个随机数改变。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法
  • AI自动剪辑短视频,对接多个自媒体平台,原视频全自动混合剪辑功能。
  • IO进程(5):线程
  • 智云-一个抓取web流量的轻量级蜜罐docker一键启动
  • 图像数据处理19
  • 【ubuntu】ROS(1)
  • 鸿蒙HarmonyOS之使用ArkTs语言实现层级树状目录选择UI
  • 手持气象站的工作原理
  • 学了这么久,PostgreSQL 这些指标到底是什么?
  • 测量 Redis 服务器的固有延迟
  • 理解Flink并行度
  • 构建电商Shopify 应用实战指南
  • 【网络】HTTP
  • C盘清理再也不用求人了!掌握这方法一辈子受用!快速彻底清理C盘垃圾
  • 【UCB CS61C】Lecture 1 - Number Representation 数制
  • 2017年终总结、随想
  • Android Studio:GIT提交项目到远程仓库
  • Bootstrap JS插件Alert源码分析
  • CSS中外联样式表代表的含义
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Flex布局到底解决了什么问题
  • nginx 配置多 域名 + 多 https
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Zepto.js源码学习之二
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 对象引论
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • kubernetes资源对象--ingress
  • raise 与 raise ... from 的区别
  • ​Python 3 新特性:类型注解
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # centos7下FFmpeg环境部署记录
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #pragma预处理命令
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (补)B+树一些思想
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (回溯) LeetCode 46. 全排列
  • (九)信息融合方式简介
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)jQuery 基础
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .htaccess配置重写url引擎
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • @RequestBody与@ResponseBody的使用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)