Python轮转抽奖效果.

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文件格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值