1.先看效果:
2.关键代码:
首先,创建tk.label标签,设置其颜色。
其次,把创建的label放入列表中。
然后,通过for循环将列表中label标签的背景颜色全部设置为统一颜色(这里设置为lightSkyBlue),再将列表中的一个label标签设置成其他颜色(这里设置成了红色),在 while ture不断进行的情况下,重复上次操作,每次设置成其他颜色的label标签加1,从而达到轮转抽奖的效果。
label10 = tk.Label(root, text='签名球衣', bg='yellow', font=('Arial', s))
label10.place(x=800, y=300, width=width, height=height)
# 将所有抽奖选项添加到列表
things = [label1, label2, label3, label4, label5, label6, label7, label8, label9, label10]
while True:
# 检测停止按钮是否被按下 如果停止 以下操作不再进行
if notround == True:
notround = False
return starts
# 程序延时
time.sleep(0.03)
# 在所有抽奖选项中循环滚动
for i in things:
i['bg'] = 'lightSkyBlue' #开始时 底色变成天蓝 不断地变回蓝色
things[starts]['bg'] = 'red' #滚动框为 红色 一个接着一个变成红色
starts += 1
if starts > maxvalue:
starts = 0
3.全部代码:
import time
import threading
from PIL import Image
import tkinter as tk # 导入 tk库 模块
import random # 导入 随机库 模块
root = tk.Tk() #初始化Tk() 建立一个窗口
root.title('轮转抽奖') # 设置标题
root.minsize(800, 700)
# photo = tk.PhotoImage(file="1.png") # file:图片路径
# imgLabel = tk.Label(root, image=photo) # 把图片整合到标签类中
# imgLabel.pack(side=tk.RIGHT) # 右对齐
width = 150 # 方块宽度
height = 100 # 方块高度
s=30 # 字体大小
label1 = tk.Label(root, text='兰博基尼', bg='yellow', font=('Arial', s))
label1.place(x=10, y=300, width=width, height=height)
label2 = tk.Label(root, text='aj一双', bg='yellow', font=('Arial', s))
label2.place(x=10, y=10, width=width, height=height)
label3 = tk.Label(root, text='iPhone15', bg='yellow', font=('Arial', s))
label3.place(x=200, y=10, width=width, height=height)
label4 = tk.Label(root, text='千元现金', bg='yellow', font=('Arial', s))
label4.place(x=400, y=10, width=width, height=height)
label5 = tk.Label(root, text='百元现金', bg='yellow', font=('Arial', s))
label5.place(x=600, y=10, width=width, height=height)
label6 = tk.Label(root, text='跑鞋一双', bg='yellow', font=('Arial', s))
label6.place(x=800, y=10, width=width, height=height)
label7 = tk.Label(root, text='笔记本电脑一台', bg='yellow', font=('Arial',s))
label7.place(x=200, y=300, width=width, height=height)
label8 = tk.Label(root, text='免休一天', bg='yellow', font=('Arial', s))
label8.place(x=400, y=300, width=width, height=height)
label9 = tk.Label(root, text='一套衣裤', bg='yellow', font=('Arial', s))
label9.place(x=600, y=300, width=width, height=height)
label10 = tk.Label(root, text='签名球衣', bg='yellow', font=('Arial', s))
label10.place(x=800, y=300, width=width, height=height)
# label11 = tk.Label(root, text='最终解释权归【我】所有', bg='white', font=('Arial', 20))
# label11.place(x=650, y=400, width=700, height=100)
# 将所有抽奖选项添加到列表
things = [label1, label2, label3, label4, label5, label6, label7, label8, label9, label10]
# 获取列表的最大索引值
maxvalue = len(things) - 1
# 设置起始值为随机整数
starts = random.randint(0, 10)
# 是否停止标志
notround = False
# 定义滚动函数
def round():
t = threading.Thread(target=startup) #启动start
t.start()
# 定义开始函数
def startup():
global starts
global notround
while True:
# 检测停止按钮是否被按下 如果停止 以下操作不再进行
if notround == True:
notround = False
return starts
# 程序延时
time.sleep(0.03)
# 在所有抽奖选项中循环滚动
for i in things:
i['bg'] = 'lightSkyBlue' #开始时 底色变成天蓝 不断地变回蓝色
things[starts]['bg'] = 'red' #滚动框为 红色 一个接着一个变成红色
starts += 1
if starts > maxvalue:
starts = 0
# 定义停止函数
def stops():
global notround # notround 为全局变量
global starts
notround = True #停止标志位
# if starts == 1: # 做手脚,跳过某人
# starts = 2
# 回调函数command 为【滚动函数】
btn1 = tk.Button(root, text='RUN', bg='lightSkyBlue', font=('Arial', 30), command=round)
btn1.place(x=300, y=450, width=150, height=150)
# 回调函数command 为【停止函数】
btn2 = tk.Button(root, text='STOP', bg='red', font=('Arial', 30), command=stops)
btn2.place(x=600, y=450, width=150, height=150)
# 循环,时刻刷新窗口
root.mainloop()
4.升级版:
将标签设置为图片,达到图片轮转。
photo = tk.PhotoImage(file="282.gif") # file:图片路径
imgLabel = tk.Label(root, image=photo,bg="red") # 把图片整合到标签类中
imgLabel.pack(side=tk.RIGHT)
注意:这里的file路径只支持gif和PGM/PPM文件格式。