【亲测有效】【源码】抽奖程序1.0 手动输入名单 重新抽奖重置 抽奖记录展示

在这里插入图片描述
创建一个带有图形用户界面的抽奖程序可以使用 Python 的 tkinter 库来实现。tkinter 是 Python 的标准 GUI 库,它简单易用,适合初学者开发小型的桌面应用程序。下面我们将实现一个抽奖程序,该程序可以从一个预设的参与名单中随机抽取一个人。

抽奖程序功能描述:

  1. 有一个输入框,用户可以输入参与抽奖的人员名单,每输入一个名字后按下回车键或点击添加按钮。
  2. 有一个按钮,点击后进行抽奖。
  3. 抽奖的结果展示在屏幕上。
  4. 重新抽奖:点击“重新抽奖”按钮后,会清空当前的中奖结果,并重新启用“开始抽奖”按钮。
  5. 显示抽奖记录:每次抽奖后,中奖者的名字和抽奖时间都会被记录在 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> 事件绑定实现了回车键添加名字的功能。

好的,我们可以增加一个重新抽奖的功能,并记录每次抽奖的时间和结果。为了实现这些功能,我们可以使用 tkinterText 组件来显示结果记录,并使用 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()

新功能说明:

  1. 重新抽奖:点击“重新抽奖”按钮后,会清空当前的中奖结果,并重新启用“开始抽奖”按钮。
  2. 显示抽奖记录:每次抽奖后,中奖者的名字和抽奖时间都会被记录在 history 列表中,并显示在 Text 组件中。

运行说明:

希望这个更新的版本能满足你的需求!如果你有任何其他要求或需要进一步的修改,请告诉我。

可执行程序下载:抽奖程序1.0 可以直接运行

posted @   爱上编程技术  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示