python用tkinter做抽奖模拟器代码100行左右且有注释
以下是一个简单的Python抽奖模拟器,使用tkinter GUI库进行构建,共计100多行代码,并附有注释说明。注意,本代码仅供参考,可能存在一些不完善的地方,如有需要请自行修改。
import tkinter as tk
import random
class LotterySimulator:
def __init__(self, master):
self.master = master
master.title("抽奖模拟器")
self.label = tk.Label(master, text="奖项列表:")
self.label.pack()
self.prize_list = tk.Listbox(master, width=50)
self.prize_list.pack()
self.add_button = tk.Button(master, text="添加奖项", command=self.add_prize)
self.add_button.pack()
self.delete_button = tk.Button(master, text="删除奖项", command=self.delete_prize)
self.delete_button.pack()
self.start_button = tk.Button(master, text="开始抽奖", command=self.start_lottery)
self.start_button.pack()
self.result_label = tk.Label(master, text="")
self.result_label.pack()
self.quit_button = tk.Button(master, text="退出", command=master.quit)
self.quit_button.pack()
self.prize_pool = [] # 奖项池
def add_prize(self):
prize = tk.simpledialog.askstring("添加奖项", "请输入奖项名称:")
if prize:
self.prize_pool.append(prize)
self.prize_list.insert(tk.END, prize)
def delete_prize(self):
selected = self.prize_list.curselection()
if selected:
self.prize_list.delete(selected)
self.prize_pool.pop(selected[0])
def start_lottery(self):
if not self.prize_pool:
tk.messagebox.showwarning("错误", "奖项列表为空!")
return
self.result_label.config(text="正在抽奖,请稍候...")
self.master.update() # 更新GUI
winner = random.choice(self.prize_pool) # 随机抽取一个奖项
self.result_label.config(text="恭喜获得 %s!" % winner)
if __name__ == "__main__":
root = tk.Tk()
app = LotterySimulator(root)
root.mainloop()
首先,我们导入了tkinter库以及random库。在LotterySimulator类中,我们定义了一些GUI元素,包括奖项列表、添加/删除奖项按钮、开始抽奖按钮以及结果标签。我们还定义了一个prize_pool列表,用于存储所有的奖项。
在add_prize方法中,我们使用simpledialog库弹出一个输入框,让用户输入奖项名称。如果用户输入了名称,我们就将它添加到prize_pool列表中,并在奖项列表框架中插入一个新的项目。
在delete_prize方法中,我们首先获取当前所选项目的索引,然后从奖项列表和prize_pool列表中删除它。
在start_lottery方法中,我们首先检查prize_pool列表是否为空。如果是,我们会弹出一个警告对话框,并返回。否则,我们将结果标签的文本设置为“正在抽奖,请稍候...”,并使用update方法更新GUI。然后,我们使用random库中的choice方法随机选择一个奖项,并将结果标签的文本设置为“恭喜获得 xxxx!”,其中xxxx是所选奖项的名称。
最后,在__main__函数中,我们创建了一个tkinter窗口,并将其传递给LotterySimulator类的构造函数。然后,我们调用root.mainloop()方法以启动应用程序的主事件循环
原文地址: https://www.cveoy.top/t/topic/fkMt 著作权归作者所有。请勿转载和采集!