自製的抽籤筒

主程式

抽籤.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()