tkinter做一个闪动的Label

       想做一个提示消息,做成会闪动的样式,但是tkinter没有提供这样的方法。所以我就自己做了一个标签,通过定时改变标签的位置达到一个简单的闪动效果。

      方法也很简单,方法一和方法二都是每0.1秒改变一次位置。由于方法二的位置不确定性更高,所以方法二的闪动效果会比方法一更加好。同时方法二是不阻塞的,方法一是阻塞的,如果界面有其他布局要响应,方法一要开启一个线程,否则界面会假死,不能响应事件。

     如果要显示的信息太长,Label可能会显示不完整,这个时候就可以使用tkinter的Message代替Label,Message可以会将内容自动断行,在默认情况下,Message组件会按照宽高比150%来进行换行,当然这个值也可以通过aspect参数进行自定义。

from tkinter import *
import time
import random
import os

root = Tk()
root.geometry('600x100')
root.title("闪动Label")

canvas = Canvas(root, width=600, height=100)
canvas.pack()
label = Label(canvas, text='xx提问:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 这道题怎么做啊', fg='green')
label.pack()

# 方法一
def flashing_1():
    '''X轴斜线移动,y轴随机'''
    flag = True
    while True:
        if flag:
            for i in range(0, 10):
                label.place(x=i, y=random.randint(1, 10))
                time.sleep(0.1)
                canvas.update()
            flag = False
        else:
            for i in range(10, -1, -1):
                label.place(x=i, y=random.randint(1, 10))
                time.sleep(0.1)
                canvas.update()
            flag = True

# 方法二
def flashing_2():
    '''X, Y轴随机1-10像素变动'''
    label.place(x=random.randint(1, 10), y=random.randint(1, 10))
    canvas.update()
    label.after(100, flashing_2)

# 提示音
os.system('spd-say "Students to ask questions"')
flashing_1()
# flashing_2()

root.mainloop()

你可能感兴趣的:(tkinter做一个闪动的Label)