【亲测有效】【源码】抽奖程序1.0 手动输入名单 重新抽奖重置 抽奖记录展示
创建一个带有图形用户界面的抽奖程序可以使用 Python 的 tkinter
库来实现。tkinter
是 Python 的标准 GUI 库,它简单易用,适合初学者开发小型的桌面应用程序。下面我们将实现一个抽奖程序,该程序可以从一个预设的参与名单中随机抽取一个人。
抽奖程序功能描述:
- 有一个输入框,用户可以输入参与抽奖的人员名单,每输入一个名字后按下回车键或点击添加按钮。
- 有一个按钮,点击后进行抽奖。
- 抽奖的结果展示在屏幕上。
- 重新抽奖:点击“重新抽奖”按钮后,会清空当前的中奖结果,并重新启用“开始抽奖”按钮。
- 显示抽奖记录:每次抽奖后,中奖者的名字和抽奖时间都会被记录在
history
列表中,并显示在Text
组件中。
抽奖程序的实现
import tkinter as tk
from tkinter import messagebox
import random
import time
from datetime import datetime
# 定义主窗口类
class RaffleApp:
def __init__(self, master):
self.master = master
self.master.title("抽奖程序")
# 创建UI组件
self.label = tk.Label(master, text="请输入参与抽奖的人员名单:")
self.label.pack()
self.entry = tk.Entry(master, width=50)
self.entry.pack()
self.entry.bind('<Return>', self.add_name) # 回车键添加名字
self.add_button = tk.Button(master, text="添加", command=self.add_name)
self.add_button.pack()
self.names_label = tk.Label(master, text="参与抽奖的人员名单:")
self.names_label.pack()
self.names_list = tk.Listbox(master, height=10, width=50)
self.names_list.pack()
self.start_button = tk.Button(master, text="开始抽奖", state='disabled', command=self.ramble)
self.start_button.pack()
self.result_label = tk.Label(master, text="")
self.result_label.pack()
self.reset_button = tk.Button(master, text="重置", command=self.reset)
self.reset_button.pack()
self.re_ramble_button = tk.Button(master, text="重新抽奖", state='disabled', command=self.re_ramble)
self.re_ramble_button.pack()
self.history_label = tk.Label(master, text="抽奖记录:")
self.history_label.pack()
self.history_text = tk.Text(master, height=10, width=50)
self.history_text.pack()
self.history = [] # 用于存储抽奖记录
def add_name(self, event=None):
name = self.entry.get().strip()
if name:
self.names_list.insert(tk.END, name)
self.entry.delete(0, tk.END)
self.start_button.config(state='normal') # 当有名字时启用抽奖按钮
else:
messagebox.showwarning("警告", "请输入一个有效的名字!")
def ramble(self):
if self.names_list.size() > 0:
names = [self.names_list.get(i) for i in range(self.names_list.size())]
winner = random.choice(names)
self.result_label.config(text=f"恭喜 {winner} 中奖!")
self.history.append((datetime.now().strftime("%Y-%m-%d %H:%M:%S"), winner))
self.update_history()
self.start_button.config(state='disabled') # 抽奖后禁用抽奖按钮
self.re_ramble_button.config(state='normal') # 抽奖后启用重新抽奖按钮
else:
messagebox.showwarning("警告", "请先添加参与抽奖的人员名单!")
def re_ramble(self):
self.result_label.config(text="")
self.start_button.config(state='normal') # 重置后启用抽奖按钮
self.re_ramble_button.config(state='disabled') # 重新抽奖后禁用重新抽奖按钮
def update_history(self):
self.history_text.delete(1.0, tk.END) # 清空历史记录
for entry in self.history:
self.history_text.insert(tk.END, f"时间: {entry[0]}, 中奖者: {entry[1]}\n")
def reset(self):
self.names_list.delete(0, tk.END)
self.result_label.config(text="")
self.history = []
self.update_history()
self.start_button.config(state='disabled') # 重置后禁用抽奖按钮
self.re_ramble_button.config(state='disabled') # 重置后禁用重新抽奖按钮
if __name__ == "__main__":
root = tk.Tk()
app = RaffleApp(root)
root.mainloop()
运行说明:
- 保存上述代码到一个
.py
文件中,例如raffle.py
。 - 在装有 Python 环境的计算机上通过命令行运行
python raffle.py
。 - 程序启动后,你可以通过输入框添加参与者的名字,每个名字输入后按回车键或点击“添加”按钮。
- 当至少添加了一个名字后,“开始抽奖”按钮将变为可用。点击此按钮可随机抽取一名中奖者。
- 抽奖结果和时间会被记录在“抽奖记录”区域。
- 你可以点击“重新抽奖”按钮来清空中奖结果并准备下一次抽奖。
- 也可以点击“重置”按钮来清空所有参与者名单和抽奖记录,准备下一轮抽奖。
技术亮点:
- 利用了
tkinter
库来构建简单的图形用户界面。 - 通过
random.choice
方法实现随机抽选的功能。 - 使用
messagebox
来显示警告信息,提高用户体验。 - 通过
Entry
组件的<Return>
事件绑定实现了回车键添加名字的功能。
好的,我们可以增加一个重新抽奖的功能,并记录每次抽奖的时间和结果。为了实现这些功能,我们可以使用 tkinter
的 Text
组件来显示结果记录,并使用 datetime
模块来获取当前时间。
下面是更新后的代码:
import tkinter as tk
from tkinter import messagebox
import random
import time
from datetime import datetime
# 定义主窗口类
class RaffleApp:
def __init__(self, master):
self.master = master
self.master.title("抽奖程序")
# 创建UI组件
self.label = tk.Label(master, text="请输入参与抽奖的人员名单:")
self.label.pack()
self.entry = tk.Entry(master, width=50)
self.entry.pack()
self.entry.bind('<Return>', self.add_name) # 回车键添加名字
self.add_button = tk.Button(master, text="添加", command=self.add_name)
self.add_button.pack()
self.names_label = tk.Label(master, text="参与抽奖的人员名单:")
self.names_label.pack()
self.names_list = tk.Listbox(master, height=10, width=50)
self.names_list.pack()
self.start_button = tk.Button(master, text="开始抽奖", state='disabled', command=self.ramble)
self.start_button.pack()
self.result_label = tk.Label(master, text="")
self.result_label.pack()
self.reset_button = tk.Button(master, text="重置", command=self.reset)
self.reset_button.pack()
self.re_ramble_button = tk.Button(master, text="重新抽奖", state='disabled', command=self.re_ramble)
self.re_ramble_button.pack()
self.history_label = tk.Label(master, text="抽奖记录:")
self.history_label.pack()
self.history_text = tk.Text(master, height=10, width=50)
self.history_text.pack()
self.history = [] # 用于存储抽奖记录
def add_name(self, event=None):
name = self.entry.get().strip()
if name:
self.names_list.insert(tk.END, name)
self.entry.delete(0, tk.END)
self.start_button.config(state='normal') # 当有名字时启用抽奖按钮
else:
messagebox.showwarning("警告", "请输入一个有效的名字!")
def ramble(self):
if self.names_list.size() > 0:
names = [self.names_list.get(i) for i in range(self.names_list.size())]
winner = random.choice(names)
self.result_label.config(text=f"恭喜 {winner} 中奖!")
self.history.append((datetime.now().strftime("%Y-%m-%d %H:%M:%S"), winner))
self.update_history()
self.start_button.config(state='disabled') # 抽奖后禁用抽奖按钮
self.re_ramble_button.config(state='normal') # 抽奖后启用重新抽奖按钮
else:
messagebox.showwarning("警告", "请先添加参与抽奖的人员名单!")
def re_ramble(self):
self.result_label.config(text="")
self.start_button.config(state='normal') # 重置后启用抽奖按钮
self.re_ramble_button.config(state='disabled') # 重新抽奖后禁用重新抽奖按钮
def update_history(self):
self.history_text.delete(1.0, tk.END) # 清空历史记录
for entry in self.history:
self.history_text.insert(tk.END, f"时间: {entry[0]}, 中奖者: {entry[1]}\n")
def reset(self):
self.names_list.delete(0, tk.END)
self.result_label.config(text="")
self.history = []
self.update_history()
self.start_button.config(state='disabled') # 重置后禁用抽奖按钮
self.re_ramble_button.config(state='disabled') # 重置后禁用重新抽奖按钮
if __name__ == "__main__":
root = tk.Tk()
app = RaffleApp(root)
root.mainloop()
新功能说明:
- 重新抽奖:点击“重新抽奖”按钮后,会清空当前的中奖结果,并重新启用“开始抽奖”按钮。
- 显示抽奖记录:每次抽奖后,中奖者的名字和抽奖时间都会被记录在
history
列表中,并显示在Text
组件中。
运行说明:
希望这个更新的版本能满足你的需求!如果你有任何其他要求或需要进一步的修改,请告诉我。
可执行程序下载:抽奖程序1.0 可以直接运行
代码学习,前言技术分享,深度分析编程技术,普及科普编程技术,天天都要敲代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)