tkinter运用子线程显示淡入淡出透明界面显示文本、动画

## 显示可视化字幕
def show(string,mode = 0):
    """
    :param string:  字符串
    :param mode:    模式 0 无 1 淡入淡出
    """
    import tkinter as tk
    import time
    from threading import Thread
    ## 模式 0 正常模式
    def mode0(string):
        top = tk.Tk()
        top.wm_title("可视化小组件")
        top.geometry('500x500')
        top.overrideredirect(True)  # 无边框
        bg_color = '#FF0001'
        top.config(bg=bg_color)  ##背景色
        top.wm_attributes('-transparentcolor', bg_color)
        top.wm_attributes("-topmost", True)  # 窗口置顶
        top.attributes('-alpha', 1)  # 设置透明度,0.0 完全透明,1.0 完全不透明
        label = tk.Label(top, text=string, font=("宋体", 30), fg="red", bg=bg_color, width=0, height=0)
        # 定义鼠标进入Label时的事件处理函数
        hover_fg_color = bg_color
        default_fg_color = "red"
        def on_enter(event):  # 定义鼠标进入Label时的事件处理函数
            label.config(fg=hover_fg_color)  # 改变字体颜色为悬停时的颜色
            top.destroy()
        def on_leave(event):  # 定义鼠标离开Label时的事件处理函数
            label.config(fg=default_fg_color)  # 恢复字体颜色为默认颜色
        # def on_label_click(event):
        #     top.destroy()# 关闭窗口
        # 为Label绑定点击事件
        # label.bind("<Button-1>", on_label_click)
        # 绑定<Enter>和<Leave>事件到Label控件
        label.bind("<Enter>", on_enter)
        label.bind("<Leave>", on_leave)
        label.place(x=200, y=200, anchor='nw')  # 这个要放在.bind后面 # label.pack(pady=20, padx=200)  # 使用pack布局管理器放置Label
        def close_gui():
            top.destroy()  # 关闭窗口
        top.after(1000, close_gui)
        top.mainloop()

    ## tkinter运用子线程显示淡入淡出透明界面显示文本、动画
    def mode1(string):
        top = tk.Tk()
        top.wm_title("可视化小组件")
        top.geometry('500x500')
        top.overrideredirect(True)  # 无边框
        bg_color = '#FF0001'
        top.config(bg=bg_color)  ##背景色
        top.wm_attributes('-transparentcolor', bg_color)
        top.wm_attributes("-topmost", True)  # 窗口置顶
        top.attributes('-alpha', 0)  # 设置透明度,0.0 完全透明,1.0 完全不透明
        label = tk.Label(top, text=string, font=("宋体", 30), fg="red", bg=bg_color, width=0, height=0)
        # 定义鼠标进入Label时的事件处理函数
        hover_fg_color = bg_color
        default_fg_color = "red"

        def on_enter(event):  # 定义鼠标进入Label时的事件处理函数
            label.config(fg=hover_fg_color)  # 改变字体颜色为悬停时的颜色
            top.destroy()

        def on_leave(event):  # 定义鼠标离开Label时的事件处理函数
            label.config(fg=default_fg_color)  # 恢复字体颜色为默认颜色

        # def on_label_click(event):
        #     top.destroy()# 关闭窗口
        # 为Label绑定点击事件
        # label.bind("<Button-1>", on_label_click)
        # 绑定<Enter>和<Leave>事件到Label控件
        label.bind("<Enter>", on_enter)
        label.bind("<Leave>", on_leave)
        label.place(x=200, y=200, anchor='nw')  # 这个要放在.bind后面 # label.pack(pady=20, padx=200)  # 使用pack布局管理器放置Label

        ## 淡出
        def close_gui():
            for i in reversed(range(1, 21)):
                time.sleep(0.5 / 20)
                top.attributes('-alpha', 1 / 20 * i)
            top.destroy()  # 关闭窗口
        ## 淡入
        def start_gui():
            for i in range(1, 21):
                time.sleep(0.5 / 20)
                top.attributes('-alpha', 1 / 20 * i)

        top.after(500, start_gui)
        top.after(1000, close_gui)
        top.mainloop()

    if mode == 0:
        Thread(target=mode0, args=(str(string),)).start()
    elif mode == 1:
        Thread(target=mode1, args=(str(string),)).start()

import time
from datetime import datetime
for i in range(10):
    time.sleep(1)
    show("时间:" + str(datetime.fromtimestamp(time.time()).strftime("%H:%M:%S")),1)

## 显示可视化字幕
def show(string,mode = 0):
    """
    :param string:  字符串
    :param mode:    模式 0 无 1 淡入淡出
    """
    import tkinter as tk
    import time
    from threading import Thread
    ## 模式 0 正常模式
    def mode0(string):
        top = tk.Tk()
        top.wm_title("可视化小组件")
        top.geometry('500x500')
        top.overrideredirect(True)  # 无边框
        bg_color = '#FF0001'
        top.config(bg=bg_color)  ##背景色
        top.wm_attributes('-transparentcolor', bg_color)
        top.wm_attributes("-topmost", True)  # 窗口置顶
        top.attributes('-alpha', 1)  # 设置透明度,0.0 完全透明,1.0 完全不透明
        label = tk.Label(top, text=string, font=("宋体", 30), fg="red", bg=bg_color, width=0, height=0)
        # 定义鼠标进入Label时的事件处理函数
        hover_fg_color = bg_color
        default_fg_color = "red"
        def on_enter(event):  # 定义鼠标进入Label时的事件处理函数
            label.config(fg=hover_fg_color)  # 改变字体颜色为悬停时的颜色
            top.destroy()
        def on_leave(event):  # 定义鼠标离开Label时的事件处理函数
            label.config(fg=default_fg_color)  # 恢复字体颜色为默认颜色
        # def on_label_click(event):
        #     top.destroy()# 关闭窗口
        # 为Label绑定点击事件
        # label.bind("<Button-1>", on_label_click)
        # 绑定<Enter>和<Leave>事件到Label控件
        label.bind("<Enter>", on_enter)
        label.bind("<Leave>", on_leave)
        label.place(x=200, y=200, anchor='nw')  # 这个要放在.bind后面 # label.pack(pady=20, padx=200)  # 使用pack布局管理器放置Label
        def close_gui():
            top.destroy()  # 关闭窗口
        top.after(1000, close_gui)
        top.mainloop()

    ## tkinter运用子线程显示淡入淡出透明界面显示文本、动画
    def mode1(string):
        top = tk.Tk()
        top.wm_title("可视化小组件")
        top.geometry('500x500')
        top.overrideredirect(True)  # 无边框
        bg_color = '#FF0001'
        top.config(bg=bg_color)  ##背景色
        top.wm_attributes('-transparentcolor', bg_color)
        top.wm_attributes("-topmost", True)  # 窗口置顶
        top.attributes('-alpha', 0)  # 设置透明度,0.0 完全透明,1.0 完全不透明
        label = tk.Label(top, text=string, font=("宋体", 30), fg="red", bg=bg_color, width=0, height=0)
        # 定义鼠标进入Label时的事件处理函数
        hover_fg_color = bg_color
        default_fg_color = "red"

        def on_enter(event):  # 定义鼠标进入Label时的事件处理函数
            label.config(fg=hover_fg_color)  # 改变字体颜色为悬停时的颜色
            top.destroy()

        def on_leave(event):  # 定义鼠标离开Label时的事件处理函数
            label.config(fg=default_fg_color)  # 恢复字体颜色为默认颜色

        # def on_label_click(event):
        #     top.destroy()# 关闭窗口
        # 为Label绑定点击事件
        # label.bind("<Button-1>", on_label_click)
        # 绑定<Enter>和<Leave>事件到Label控件
        label.bind("<Enter>", on_enter)
        label.bind("<Leave>", on_leave)
        label.place(x=200, y=200, anchor='nw')  # 这个要放在.bind后面 # label.pack(pady=20, padx=200)  # 使用pack布局管理器放置Label

        ## 淡出
        def close_gui():
            for i in reversed(range(1, 21)):
                time.sleep(0.5 / 20)
                top.attributes('-alpha', 1 / 20 * i)
            top.destroy()  # 关闭窗口
        ## 淡入
        def start_gui():
            for i in range(1, 21):
                time.sleep(0.5 / 20)
                top.attributes('-alpha', 1 / 20 * i)

        top.after(500, start_gui)
        top.after(1000, close_gui)
        top.mainloop()

    if mode == 0:
        Thread(target=mode0, args=(str(string),)).start()
    elif mode == 1:
        Thread(target=mode1, args=(str(string),)).start()

import time
from datetime import datetime
for i in range(10):
    time.sleep(1)
    show("时间:" + str(datetime.fromtimestamp(time.time()).strftime("%H:%M:%S")),1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值