自製的抽籤筒
主程式
抽籤.rar
源碼
import tkinter as tk
import random
class LotteryApp:
def __init__(self, master):
self.master = master
master.title("抽籤")
master.geometry("1080x720") # 設置視窗大小為 1080x720
# 設置主框架以便於放置中心對齊的元件
self.frame = tk.Frame(master)
self.frame.pack(expand=True)
self.label = tk.Label(self.frame, text="輸入抽籤範圍(例如:1-100):", font=("Arial", 28))
self.label.pack(pady=20) # 加入上下間距
self.range_entry = tk.Entry(self.frame, width=20, font=("Arial", 24))
self.range_entry.pack(pady=20) # 加入上下間距
self.draw_button = tk.Button(self.frame, text="開始抽籤", command=self.start_draw, font=("Arial", 24))
self.draw_button.pack(pady=20) # 加入上下間距
self.result_label = tk.Label(self.frame, text="", font=("Arial", 36), fg="blue")
self.result_label.pack(pady=20) # 加入上下間距
self.is_drawing = False # 標記是否正在抽獎
self.color_index = 0 # 顏色索引
def start_draw(self):
range_text = self.range_entry.get()
try:
# 解析用户输入的范围
start, end = map(int, range_text.split('-'))
if start > end:
raise ValueError("起始值不能大於結束值")
except ValueError:
self.result_label.config(text="請輸入有效的數字範圍 (例如 1-100)")
return
if self.is_drawing:
return # 防止重複點擊按鈕
self.is_drawing = True
self.result_label.config(text="抽籤中...")
self.master.update()
self.animate_draw(start, end, 0)
def animate_draw(self, start, end, count):
if count < 20: # 滚动次数
current_number = random.randint(start, end)
self.result_label.config(text=str(current_number))
self.result_label.config(fg="red") # 改變顏色以強調
self.master.after(100, self.animate_draw, start, end, count + 1)
else:
# 最终抽取结果
self.show_winner(start, end)
def show_winner(self, start, end):
winner = random.randint(start, end)
self.result_label.config(text=f"恭喜!被抽中的是: {winner}" '號')
self.is_drawing = False # 重置抽奖状态
self.cycle_rainbow_colors() # 開始彩虹顏色循環
def cycle_rainbow_colors(self):
# 彩虹顏色列表
rainbow_colors = ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]
current_color = rainbow_colors[self.color_index]
self.result_label.config(fg=current_color)
# 更新顏色索引以循環顏色
self.color_index = (self.color_index + 1) % len(rainbow_colors)
# 每 500 毫秒調用此方法以實現顏色循環
self.result_label.after(500, self.cycle_rainbow_colors)
if __name__ == "__main__":
root = tk.Tk()
app = LotteryApp(root)
root.mainloop()