import tkinter as tk
import random
import time
from tkinter import messagebox, font
class RandomSelector:
def __init__(self, root):
# 设置主窗口
self.root = root
self.root.title("随机抽人程序")
self.root.geometry("600x400")
self.root.resizable(False, False)
self.root.configure(bg="#f0f0f0")
# 同学名单
self.students = ["暗黑天使","赤血龙子","帝皇之子","钢铁勇士",
"白色疤痕","帝国之拳","太空野狼","午夜领主",
"圣血天使","羽蛇卫士","钢铁之手","吞世之勇","极限战士",
"死亡守卫","千疮之子","影月苍狼","怀言者",
"火蜥蜴","暗鸦守卫","九头蛇"]
self.is_rolling = False
self.roll_interval = 50 # 滚动间隔时间(毫秒)
# 创建字体
self.title_font = font.Font(family="SimHei", size=18, weight="bold")
self.name_font = font.Font(family="SimHei", size=36, weight="bold")
self.btn_font = font.Font(family="SimHei", size=14)
# 创建界面元素
self.create_widgets()
def create_widgets(self):
# 标题标签
title_label = tk.Label(
self.root,
text="让战团选择你",
font=self.title_font,
bg="#f0f0f0",
fg="#333333"
)
title_label.pack(pady=20)
# 显示选中人员的框架
display_frame = tk.Frame(self.root, width=500, height=150, bg="white", relief="ridge", bd=2)
display_frame.pack(pady=20)
display_frame.pack_propagate(False) # 防止框架大小被内容改变
# 显示名字的标签
self.name_label = tk.Label(
display_frame,
text="准备开始",
font=self.name_font,
bg="white",
fg="#e74c3c"
)
self.name_label.pack(expand=True)
# 按钮框架
btn_frame = tk.Frame(self.root, bg="#f0f0f0")
btn_frame.pack(pady=30)
# 开始/停止按钮
self.start_btn = tk.Button(
btn_frame,
text="开始抽取",
font=self.btn_font,
width=12,
height=1,
bg="#3498db",
fg="white",
command=self.toggle_rolling
)
self.start_btn.pack(side=tk.LEFT, padx=10)
# 重置按钮
reset_btn = tk.Button(
btn_frame,
text="重置",
font=self.btn_font,
width=12,
height=1,
bg="#95a5a6",
fg="white",
command=self.reset
)
reset_btn.pack(side=tk.LEFT, padx=10)
# 显示名单按钮
list_btn = tk.Button(
btn_frame,
text="显示名单",
font=self.btn_font,
width=12,
height=1,
bg="#2ecc71",
fg="white",
command=self.show_list
)
list_btn.pack(side=tk.LEFT, padx=10)
def toggle_rolling(self):
"""切换滚动状态(开始/停止)"""
if self.is_rolling:
# 停止滚动
self.is_rolling = False
self.start_btn.config(text="开始抽取", bg="#3498db")
else:
# 开始滚动
self.is_rolling = True
self.start_btn.config(text="停止抽取", bg="#e74c3c")
self.roll_names()
def roll_names(self):
"""滚动显示名字"""
if self.is_rolling:
# 随机选择一个名字
random_name = random.choice(self.students)
self.name_label.config(text=random_name)
# 继续滚动
self.root.after(self.roll_interval, self.roll_names)
def reset(self):
"""重置程序"""
self.is_rolling = False
self.name_label.config(text="准备开始")
self.start_btn.config(text="开始抽取", bg="#3498db")
def show_list(self):
"""显示所有同学名单"""
list_str = "班级同学名单:\n\n" + "\n".join(self.students)
messagebox.showinfo("同学名单", list_str)
if __name__ == "__main__":
root = tk.Tk()
app = RandomSelector(root)
root.mainloop()