抽签小游戏:Python-Tkinter
程序员文章站
2022-07-12 12:51:42
...
抽签小游戏:使用python的Tkinter库实现。
python3自带的库–Tkinter
用到Tkinter的控件的说明和参数:
程序按钮的摆放顺序以及坐标图:
源代码:
# 导入tkinter模块
import tkinter as tk
import threading
from time import sleep
from random import randint
from tkinter import messagebox
# 创建窗口对象
window = tk.Tk()
window.title('抽签')
# 窗口大小
window.minsize(800, 600)
# 将学生姓名放入列表中
name_list = ['同学1', '同学2', '同学3', '同学4', '同学5', '同学6',
'同学7', '同学8', '同学9', '同学10', '同学11', '同学12',
'同学13', '同学14', '同学15', '同学16', '同学17', '同学18']
# 创建一个空列表,用来放置做好的按钮
btn_list = []
# 循环遍历学生列表的长度
for i in range(len(name_list)):
# 设置按钮,传入学生姓名作为按钮上显示的文本,设置字体,设置按钮颜色为白色
button = tk.Button(window, text=name_list[i], font=('SimSun 15 bold'), bg='white')
# 将按钮添加入按钮列表
btn_list.append(button)
# 按行摆放按钮,因为每行摆放6个,所以对6进行取商和余数。
# 根据每行摆放按钮数量不同可以更改
y, x = divmod(i, 6)
# 放置按钮,位置会随着i的值变化,依次摆放
button.place(x=100+x*100, y=100+y*100, width=80, height=80)
def round():
# 点击按钮后,判断按钮显示的文本,然后换成相反的
if btn_start['text'] == '开始':
btn_start['text'] = '停止'
else:
# 如果点击按钮时,显示的文本是‘停止’,就会跳出函数。
btn_start['text'] = '开始'
return
# 设置按钮列表的长度,也就是学生数量
m = len(btn_list)
# 随机生成i的值,i将会作为按钮列表的索引值
# 也就是点击开始按钮时会随机开始
i = randint(0, m-1)
while True:
# 遍历所有的按钮,将所有的组件背景变为白色
for x in btn_list:
x['bg'] = 'white'
# 将当前数值对应的组件的背景颜色设置成红色,表示选中的状态
btn_list[i]['bg'] = 'red'
# 判断按钮显示的文本是否是‘开始’,
# 因为只有点击停止按钮时显示文本才会变成‘开始’,弹窗出现,跳出循环
if btn_start['text'] == '开始':
# 设置弹窗,使用showinfo函数展示中奖信息
tk.messagebox.showinfo('中奖', message='恭喜{}成为幸运儿'.format(btn_list[i]['text']))
# 新建一个窗口达到弹窗的效果,可以设置字体大小和窗口大小
# 有需要的可以使用这部分代码
# popup = tk.Tk()
# popup.title('中奖')
# text = '恭喜{}成为幸运儿'.format(btn_list[i]['text'])
# msg = tk.Label(popup, text=text, font=('SimSun 15 bold'), width=30, height=5)
# # 布局函数pack
# msg.pack(side=tk.LEFT)
# popup.mainloop()
break
# 重新将i赋值一个随机坐标,目的是为了让抽签时每次都是随机选中按钮的
i = randint(0, m-1)
# 延时,可以更改时间控制速度
sleep(0.05)
# 创建线程的函数
def newtask():
# 创建线程并运行,target传入开始抽签的函数
t = threading.Thread(target=round)
t.start()
# 设置开始按钮,commond传入点击按钮时执行的函数
btn_start = tk.Button(window, text='开始', font=('SimSun 15 bold'), command=newtask)
# 放置开始按钮
btn_start.place(x=300, y=450, width=200, height=80)
# 事件循环,保持窗口不会关闭
window.mainloop()