吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2726|回复: 26
收起左侧

[Python 原创] 用Python实现年终联欢会摇奖【特等奖、一等奖、二等奖、三等奖】

  [复制链接]
bx_liu 发表于 2025-1-20 09:09
新的一年马上到来,年终联欢会要摇奖,用Python实现:
[Python] 纯文本查看 复制代码
import pandas as pd
import tkinter as tk
from tkinter import messagebox
import random
import pygame
from PIL import Image, ImageTk

# 初始化pygame
pygame.mixer.init()

# 读取Excel文件
file_path = 'data.xlsx'
df = pd.read_excel(file_path)

# 过滤出未参加的人员
unparticipated_df = df[df['参加否'] != '已参加']

# 创建主窗口
root = tk.Tk()
root.title("抽奖系统")
root.geometry("1024x768")

# 加载背景图片
bg_image = Image.open("bg.jpg")
bg_photo = ImageTk.PhotoImage(bg_image)
bg_label = tk.Label(root, image=bg_photo)
bg_label.place(x=0, y=0, relwidth=1, relheight=1)

# 播放背景音乐
pygame.mixer.music.load("背景音乐2.wav")
pygame.mixer.music.play(-1)

# 定义开始抽奖函数
def start_lottery():
    pygame.mixer.music.stop()
    pygame.mixer.Sound("滚动音乐1.wav").play(loops=-1)
    global rolling
    rolling = True
    roll_names()

# 定义停止抽奖函数
def stop_lottery():
    global rolling
    rolling = False
    pygame.mixer.Sound("中奖音乐1.wav").play()
    winner = current_name.get()
    winner_info = unparticipated_df[unparticipated_df['姓名'] == winner].iloc[0]
    messagebox.showinfo("中奖信息", f"姓名: {winner_info['姓名']}\n部门: {winner_info['部门']}\n手机号: {winner_info['手机号']}")
    update_excel(winner_info)

# 定义更新Excel文件函数
def update_excel(winner_info):
    global unparticipated_df
    df.loc[df['姓名'] == winner_info['姓名'], '参加否'] = '已参加'
    df.loc[df['姓名'] == winner_info['姓名'], '奖项等级'] = selected_prize.get()
    df.to_excel(file_path, index=False)
    unparticipated_df = df[df['参加否'] != '已参加']

# 定义滚动名字函数
def roll_names():
    if rolling:
        name = random.choice(unparticipated_df['姓名'].tolist())
        current_name.set(name)
        root.after(50, roll_names)

# 定义继续下一轮抽奖函数
def next_round():
    pygame.mixer.music.play(-1)
    current_name.set("")
    selected_prize.set("特等奖")

# 创建开始按钮
start_button = tk.Button(root, text="开始", command=start_lottery, font=("Arial", 24))
start_button.place(relx=0.1, rely=0.7, anchor=tk.CENTER)

# 创建停止按钮
stop_button = tk.Button(root, text="停止", command=stop_lottery, font=("Arial", 24))
stop_button.place(relx=0.1, rely=0.8, anchor=tk.CENTER)

# 创建继续下一轮按钮
next_round_button = tk.Button(root, text="继续下一轮摇奖", command=next_round, font=("Arial", 18))
next_round_button.place(relx=0.9, rely=0.9, anchor=tk.SE)

# 创建显示当前名字的标签
current_name = tk.StringVar()
name_label = tk.Label(root, textvariable=current_name, font=("Arial", 36), bg="white")
name_label.place(relx=0.5, rely=0.4, anchor=tk.CENTER)

# 创建选择奖项等级的下拉菜单
selected_prize = tk.StringVar(value="特等奖")
prize_options = ["特等奖", "一等奖", "二等奖", "三等奖"]
prize_menu = tk.OptionMenu(root, selected_prize, *prize_options)
prize_menu.config(font=("Arial", 24))
prize_menu.place(relx=0.5, rely=0.3, anchor=tk.CENTER)

# 运行主循环
root.mainloop()



奖项分:特等奖、一等奖、二等奖、三等奖   可以选择;背景音乐和滚动音乐、中奖音乐、背景图片自己网上下载哦!

EXCEl参与摇奖人员数据结构

EXCEl参与摇奖人员数据结构

摇奖界面

摇奖界面

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
血帆海盗DK + 1 + 1 谢谢@Thanks!已测试 很好用
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xlln + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| bx_liu 发表于 2025-1-21 09:13
本帖最后由 bx_liu 于 2025-1-21 09:32 编辑
foxmulder 发表于 2025-1-21 04:50
怎么把一个人的名字重复放在Excel里不让人看出来?

不让他看就行了
其实,你可以再做个工作簿2(Sheet2),读取时读Sheet2,在Sheet1放正常数据,别人看到也没问题,但是程序运行时读的数据是Sheet2,你明白没???你好坏哦!
13行:
[Python] 纯文本查看 复制代码
 df =  pd.read_excel(file_path,sheet_name="sheet2") 


56行:
[Python] 纯文本查看 复制代码
df.to_excel(file_path, sheet_name="sheet2", index=False)
wuming12365 发表于 2025-1-20 11:02
icho 发表于 2025-1-20 11:21
cai2532 发表于 2025-1-20 11:45
这个不错,可以试用下效果。
meluca1207 发表于 2025-1-20 12:35
不支持黑幕吗
kangta520 发表于 2025-1-20 12:59
支持暗箱吗
1024A1024 发表于 2025-1-20 13:23
学习了,感谢分享
chboy 发表于 2025-1-20 13:47
代码内音频记得补充
狐白本白 发表于 2025-1-20 14:06
这不得增加哥白名单吗
l60037527 发表于 2025-1-20 14:15
抽奖后展示的界面太简陋
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-2-27 12:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表