PyQt5设计一个简单的抽奖系统

PyQt5抽奖系统

程序运行截图

抽奖系统界面截图

抽奖系统代码

该系统使用PyQt5模块以及openpyxl模块开发,需要使用pip安装导入PyQt5模块和openpyxl模块

import random, sys
from PyQt5.QtWidgets import QWidget, QFormLayout, QLineEdit, QVBoxLayout, QApplication, QPushButton, QDesktopWidget
from PyQt5.QtCore import pyqtSignal, QTimer
from openpyxl import load_workbook

NAME = [] #获奖用户名
TEL = [] #获奖用户电话
EXCEL_PATH = "./抽奖名单.xlsx"

'''抽奖窗口程序'''
class Lucky(QWidget):
    def __init__(self, parent=None):
        super(Lucky, self).__init__(parent=parent)
        self.status = False
        self.numTimer = QTimer()  # 创建一个定时器
        self.numTimer.timeout.connect(self.num_timer_out)  # 定时器超时触发函数
        self.nameLine = QLineEdit()
        self.telLine = QLineEdit()
        self.luckyBtn = QPushButton('开始抽奖')
        self.luckyBtn.clicked.connect(self.startTimer)  # 抽奖按钮连接槽函数
        self.formLayout = QFormLayout()
        self.formLayout.addRow('获奖名字', self.nameLine)
        self.formLayout.addRow('电话号码', self.telLine)
        self.vbox = QVBoxLayout()
        self.vbox.addLayout(self.formLayout)
        self.vbox.addWidget(self.luckyBtn)
        self.setLayout(self.vbox)
        self.show()
    def startTimer(self): #定时器函数
        self.status = ~self.status  # 取反
        if self.status:
            self.numTimer.start(1) #开启定时器并设置超时时间为1毫秒
            self.luckyBtn.setText('停止抽奖')  # 停止计时器
        else:
            self.numTimer.stop()
            self.luckyBtn.setText('开始抽奖')  # 开启计时器
    def num_timer_out(self): #定时器超时处理事件函数
        self.num = random.randint(1,2) #抽奖核心代码,从1到2中随机生成一个数字num
        self.nameLine.setText(NAME[self.num]) #抽取姓名列中的第num行
        self.telLine.setText(str(TEL[self.num])) #抽取电话列中的第num行
def read_excel(path): #抽奖名单获取函数
    luckyData = load_workbook(path) #读取Excel表格
    luckyTable = luckyData[luckyData.sheetnames[0]] #获取第一个工作表
    for luckyRow in luckyTable.iter_rows(min_row=1): #从第一行开始遍历所有行
        NAME.append(luckyRow[1].value) # 获取第1列的值
        TEL.append(luckyRow[2].value) # 获取第2列的值
def center(window): #窗口居中函数
    screenSize = QDesktopWidget().screenGeometry() #获取显示屏幕大小
    windowSize = window.geometry() #获取当前窗口大小
    newLeft = int((screenSize.width() - windowSize.width()) / 2)
    newTop = int((screenSize.height() - windowSize.height()) / 2)
    window.move(newLeft, newTop)

if __name__ == "__main__":
    read_excel(EXCEL_PATH)
    app = QApplication(sys.argv)
    draw = Lucky()
    draw.setWindowTitle("XX抽奖系统") #抽奖系统窗口名称
    draw.resize(400, 400)
    center(draw)
    sys.exit(app.exec_())

抽奖数据格式

创建一个Excel表格,按照以下格式填入抽奖人信息,并将该表格放到和代码同一目录下

序号姓名电话
1张三15011111111
2李四15022222222

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 数据库APi 编程(c/c++)-1.0

MySQL数据库API库 访问MySQL服务器,这需要使用mysqlclient库,MySQL的大多数客户端API(除Java和.NET)都是通过这个库来和MySQL服务器通讯的,而这个库正是使用C语言编写的。 可使用mysql -V 命令查看当前系统内所使用的…

C# Onnx yolov8n csgo player detection

目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8n csgo player detection 效果 模型信息 Model Properties ------------------------- date:2023-12-22T15:01:08.014205 author:Ultralytics task:detect license:AGPL-…

从0到1部署gitlab自动打包部署项目

本文重点在于配置ci/cd打包 使用的是docker desktop 第一步安装docker desktop Docker简介 Docker 就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,而不需要从该盒子中一件一件的取。Docker中文社区、…

集合论:二元关系(1)

集合论这一章内容很多,重点是二元关系中关系矩阵,关系图和关系性质:自反、反自反、对称、反对称、传递以及关系闭包的运算,等价关系,偏序关系,哈斯图,真吓人! 1.笛卡儿积 由两个元素x和y按照一…

Opencv计算机视觉的分类

传统的计算机视觉可以使用Opencv等Python库,对图像进行简单的操作,例如对图像缩放、滤波、阈值分割等等。对于计算机来说,一张彩色图片就是一个三通道的矩阵,分别对应红绿蓝(RGB)三种颜色,通过改…

计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

文章目录 1 域名系统DNS1.1 域名vsIP?1.2 域名结构1.3 域名到IP的解析过程域名服务器类型 2 文件传送协议2.1 FTP 文件传输协议2.2 NFS 协议2.3 简单文件传送协议 TFTP 3 万维网WWW3.1 统一资源定位符URL3.2 超文本传送协议HTTP3.2.1 HTTP工作流程3.2.2 HTTP报文结构…

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包,专门用于构建和分析生物系统学中的进化树(也称为系统发育树或phylogenetic tree)。以下是对V.PhyloMaker2的一些基本介绍和使用说明: 论文介绍:V.PhyloMaker2: An updated and enla…

混合精度训练(MAP)

一、介绍 使用精度低于32位浮点数的数字格式有很多好处。首先,它们需要更少的内存,可以训练和部署更大的神经网络。其次,它们需要更少的内存带宽,这加快了数据传输操作。第三,数学运算在降低精度的情况下运行得更快&a…

web架构师编辑器内容-创建业务组件和编辑器基本行为

编辑器主要分为三部分,左侧是组件模板库,中间是画布区域,右侧是面板设置区域。 左侧是预设各种组件模板进行添加 中间是使用交互手段来更新元素的值 右侧是使用表单的方式来更新元素的值。 大致效果: 左侧组件模板库 最初的模板…

博客引擎 Hexo 入门介绍+安装笔记

Hexo Hexo is a fast, simple & powerful blog framework. 一直使用的是 jekyll,文章越写越多,不太好管理。是时候换个博客尝试一下。 Prepare blog zh_CN 本机为 MAC。不同系统会略有不同,但是大同小异。 Node.js 必须。 作用&…

LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

人工智能和大型语言模型领域正在迅速发展。一年前,没有人使用LLM来提高生产力。时至今日,很难想象我们大多数人或多或少都在使用LLM提供服务,从个人助手到文生图场景。由于大量的研究和兴趣,LLM每天都在变得越来越好、越来越聪明。…

网站使用https认证

随着网络的普及和依赖程度的增加,网站安全性问题也日益凸显。为了确保用户和网站之间的数据传输安全,采用HTTPS认证已经变得至关重要。 1.数据安全是首要任务 在互联网上,信息传输是网站运作的基础。然而,未加密的传输容易受到中…

计算机网络——计算机网络的概述(一)

前言: 面对马上的期末考试,也为了以后找工作,需要掌握更多的知识,而且我们现实生活中也已经离不开计算机,更离不开计算机网络,今天开始我们就对计算机网络的知识进行一个简单的学习与记录。 目录 一、什么…

案例136:基于微信小程序的公交信息在线查询系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

使用Velero备份、恢复k8s集群上的资源

一、Velero简介 Velero提供备份和恢复 Kubernetes 集群资源和持久卷的工具。 Velero功能: 对群集进行备份,并在丢失时进行还原。将集群资源迁移到其他集群。 Velero 包括: 在群集上运行的服务器在本地运行的命令行客户端 开源地址&…

【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)

文章目录 概述问题概述1. 代码混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤2. 缺乏文档3. 缺乏推荐的最佳实践4. 性能问题 总结 概述 Cocos2dx是一个非常流行的跨平台游戏引擎,开发者可以使用这个引擎来开发iOS、Android和Web游戏。同时,Coco…

SSTI模板注入(Flask+Jinja2)

文章目录 一、前置知识1.1 模板引擎1.2 渲染 二、SSTI模板注入2.1 原理2.2 沙箱逃逸沙箱逃逸payload讲解其他重要payload 2.3 过滤绕过 三、PasecaCTF-2019-Web-Flask SSTI 一、前置知识 1.1 模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使…

nodejs+vue+ElementUi会员制停车场车位系统

总之,智能停车系统使停车场管理工作规范化,系统化,程序化,避免停车场管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改停车场情况。 三、任务:小组任务和个人任务 智…

Linux中vim中进行替换/批量替换

Linux中vim中进行替换/批量替换 一:在 Vim 中进行文本替换的操作是通过使用 :s(substitute)命令来实现的。这里是一些基本的替换命令 替换当前行的第一个匹配项: :s/old/new/这将替换当前行中第一个出现的 “old” 为 “new”。 替换当前行的所有匹配项…

工作实践篇 Flink(一:flink提交jar)

一:参数 flink 模式 – standalone 二:步骤 1. 将本地测试好的代码进行本地运行。确保没问题,进行打包。 2. 找到打好的jar包,将jar包上传到对应的服务器。 3. 执行flink命令,跑代码。 /opt/flink/flink-1.13.6/bi…