通过tkinter做一个简易的抽奖系统。
思路:通过button按钮text属性展示信息,按开始按钮,在button中随机不断展示信息,按结束按钮则完成抽奖。代码如下:
- import tkinter as tk
- import random
- from tkinter import messagebox
- class Cj:
- def __init__(self,master):
- self.master = master
- self.var = tk.StringVar()
- l = tk.Label(master,text='简易抽奖系统',font=('方正舒体',16),bg='red',fg='blue')
- l.pack()
- button1 = tk.Button(root,textvariable=self.var,font=('方正舒体',20),width=16,height=3,fg='red')
- button1.pack(pady=30)
- button2 = tk.Button(root, text='开始', font=('方正舒体', 15), width=10,command=self.start)
- button2.pack(pady=10,padx=10,side="left")
- button3 = tk.Button(root, text='结束', font=('方正舒体', 15), width=10,command=self.end)
- button3.pack(pady=10, padx=10, side="right")
- self.lists = ['张三', '李四', '王五', '李飞', '李伟', '黄骅']
- self.var.set('准备好了吗?')
- def start(self):
- self.var.set(random.choice(self.lists))
- self.s = self.master.after(100,self.start)
- def end(self):
- try:
- self.master.after_cancel(self.s)
- self.var.set(random.choice(self.lists))
- except Exception:
- messagebox.showerror(title = '错误信息',message = '请先按开始按钮!')
- root = tk.Tk()
- root.title('抽奖系统')
- root.geometry('440x300+200+100')
- root.resizable(0, 0) #设置窗口不可变
- Cj(root)
- root.mainloop()
效果如下:


本来刚开始想用while True显示信息,这样不行,后面用了tkinter中的after方法,用于显示;
重点:
1、self.master.after(100,self.start)是指每隔100ms用于显示姓名在button上;
2、当点击结束时,需要停止after方法,这时候需要用到after_cancel的方法,self.master.after_cancel(self.s)是停止after方法。