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

抽奖系统(基于Tkinter)

一、抽奖规则及使用方法

抽奖规则: 从1-138个号码中随机抽奖,共进行n轮抽奖,每个号码仅有一次中奖机会,即已中奖的号码不会再次中奖。
使用方法: 要求开始抽奖后屏幕上随机滚动显示中奖号码,点击“STOP”之后,滚动停止,此时所显示的号码为本轮中奖号码;点击“清空内容”后方可再次抽奖。

二、实现代码

from tkinter import *import numpy as np
from PIL import Image, ImageTk
import random
import pandas as pd
from time import sleep
import threading#线程class Application():def __init__(self,app=None):self.app=appself.application()self.n=0#执行次数self.flag=Truedef application(self):#农行logoself.image=Image.open('abc300.png')self.abc_logo=ImageTk.PhotoImage(self.image)self.label0=Label(self.app,image=self.abc_logo)self.label0.pack()# 抽奖系统self.label1 = Label(self.app, text='抽奖系统', font=('黑体', 30), bg='white').pack()#开始抽奖按钮global number_poolnumber_pool=[i for i in range(1,139)]def raffle():self.flag=Trueif self.n==0:#第一轮抽奖while self.flag:luck_numbers = []number_pool2=number_pool.copy()for i in range(50):re=random.choice(number_pool2)number_pool2.remove(re)luck_numbers.append(re)arr=np.array(luck_numbers).reshape(5,10)printf(arr)#从奖池中删除已中奖号码for i in luck_numbers:number_pool.remove(i)print('luck_numbers=',luck_numbers)print('number_pool=', number_pool)self.n += 1elif self.n==1:#第二轮抽奖while self.flag:luck_numbers = []number_pool2=number_pool.copy()for i in range(20):re=random.choice(number_pool2)number_pool2.remove(re)luck_numbers.append(re)arr=np.array(luck_numbers).reshape(2,10)printf(arr)#从奖池中删除已中奖号码for i in luck_numbers:number_pool.remove(i)print('luck_numbers=',luck_numbers)print('number_pool=', number_pool)self.n += 1elif self.n==2:#第三轮抽奖while self.flag:luck_numbers = []number_pool2=number_pool.copy()for i in range(10):re=random.choice(number_pool2)number_pool2.remove(re)luck_numbers.append(re)arr=np.array(luck_numbers).reshape(1,10)printf(arr)#从奖池中删除已中奖号码for i in luck_numbers:number_pool.remove(i)print('luck_numbers=',luck_numbers)print('number_pool=', number_pool)self.n += 1elif self.n==3:#第四轮抽奖while self.flag:luck_numbers = []number_pool2=number_pool.copy()for i in range(10):re=random.choice(number_pool2)number_pool2.remove(re)luck_numbers.append(re)arr=np.array(luck_numbers).reshape(1,10)printf(arr)#从奖池中删除已中奖号码for i in luck_numbers:number_pool.remove(i)print('luck_numbers=',luck_numbers)print('number_pool=', number_pool)self.n += 1else:self.label0 = Label(self.app, text='本次抽奖结束。', font=('黑体', 20), bg='white')def printf(arr):#显示中奖结果arr = pd.DataFrame(arr)  # 将numpy.array转换为pandas.dataframearr = arr.set_index(0)  # 将第一列设置为行索引arr.index.name = None  # 将行索引名称设置为Nonearr = arr.to_string(header=False)  # 转化为字符形式,并去掉列索引print('arr=',arr)self.label0 = Label(self.app, text='第%d轮抽奖中奖号码'%(self.n+1), font=('黑体', 20), bg='white')self.label0.pack()self.label1 = Label(self.app, text=arr, font=('黑体', 20), bg='white')self.label1.pack()self.app.update()sleep(0.02)if self.flag==True:delete_content()#def get_start(arr):#   T1 = threading.Thread(name='label0',#                          target=printf(arr),#                          daemon=True)#    T1.start()def delete_content():self.app.after(0, self.label0.destroy)self.app.after(0,self.label1.destroy)def stop_run():self.flag=Falseself.bt = Button(self.app, text='开始抽奖', command=raffle, font=('黑体', 14), bg='white').pack()self.bt = Button(self.app, text='S T O P', command=stop_run, font=('黑体', 14), bg='white').pack()self.bt = Button(self.app, text='清除内容', command=delete_content, font=('黑体', 14), fg='red', bg='white',activebackground='red').pack()
if __name__ == '__main__':app = Tk()app.title('中国农业银行抽奖系统')app.config(bg="white")App = Application(app)app.geometry('800x600+300+150')  # 窗口大小设置app.mainloop()
http://www.xdnf.cn/news/3995.html

相关文章:

  • 微服务项目中网关服务挂了程序还可以正常运行吗
  • 数学复习笔记 2
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • JobHistory Server的配置和启动
  • LCD,LED
  • 期末项目Python
  • GoogleTest:GMock初识
  • 嵌入式开发学习日志Day13
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年
  • 《赤色世界》彩蛋
  • 数据封装的过程
  • 分析atoi(),atol()和atof()三个函数的功能
  • 【今日三题】小红的口罩(小堆) / 春游(模拟) / 数位染色(01背包)
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
  • Linux怎么更新已安装的软件
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 1.openharmony环境搭建
  • osquery在网络安全入侵场景中的应用实战(二)
  • 关于毕业论文,查重,AIGC
  • QT6 源(78):阅读与注释滑动条 QSlider 的源码,其是基类QAbstractSlider 的子类,及其刻度线的属性举例
  • 算法热题——等价多米诺骨牌对的数量
  • 【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别
  • 【云备份】服务端业务处理模块设计与实现
  • 2025-04-18-文本相似度-菜鸟
  • LLM(17):计算所有输入 token 的注意力权重
  • 【C语言练习】023. 编写条件编译代码
  • 高速互联技术:NVLink和PCIe有什么区别
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(七)