效果:
代码:
from tkinter import *
Move_text="[18:00] 到点, 下班, 一天工资直接到手~"#弹幕文本内容
Move_speed=3#文本移动速度
def on_resize(evt):#维持窗口透明背景
tk.configure(width=evt.width,height=evt.height)
canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
def task():#每隔10ms移动弹幕文本位置
global x
canvas.delete("mytext")#清除文本
canvas.create_text(x,50,text=Move_text, tag="mytext",font="微软雅黑 50 bold",fill="white",anchor='w')#在新位置重新绘制文本
x-=Move_speed#移动位置
if x<-Screen_Width:
x=Screen_Width
tk.after(10, task)
tk = Tk()
Screen_Width=tk.winfo_screenwidth()#获取屏幕横向分辨率
x=Screen_Width
tk.maxsize(Screen_Width+10, 100)#限制窗口最大宽度为屏幕分辨率宽度, tkinter好像不能重新设置已经创建的窗口的大小
tk.geometry('2560x100+-5+-15')#向屏幕外移动一些像素隐藏窗口上和左边框
tk.title('滚动字幕测试')
tk.overrideredirect(True)#无标题栏
tk.attributes('-topmost', True)#置顶
tk.resizable(False, False) # 窗口大小不可变
TRANSCOLOUR = 'gray'#设置窗口背景色为灰色 //设为black时不知道为什么拖不动窗口
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)#设置灰色为透明色,这样所有灰色区域都被认为是透明的了
canvas = Canvas(tk)#创建画布
canvas.pack(fill=BOTH, expand=Y)
tk.bind('<Configure>', on_resize)#tkinter会自动重绘窗口导致透明背景失效, 重写事件维持透明背景
tk.after(10, task)#递归循环,每隔10ms移动弹幕文本位置
tk.mainloop()
tkinter还是有个问题,无边框不是真的无边框还是会有条细线,但PyQt又感觉太麻烦了不想搞,凑活用吧