效果

双击开始播放,继续双击可以加速播放

右键可以弹出菜单:播放、暂停、退出

左键可以拖动窗口

代码

from tkinter import *
import time
 
import tkinter as tk
 
file = "待播放文本.txt"
text=" "
 
bgcolor = '#000000'
fgcolor = '#ffffff'
 
def gettext():
    global text
    # 读
    with open(file, "r",encoding='utf-8') as f:
        # 按字节读
        text = f.read()    
#获取一行
gettext()
root = tk()
# 窗口设定为无边框
root.overrideredirect(true)
# 窗口前置
root.wm_attributes("-topmost", 1)
# 窗口属性 透明度设置
root.attributes("-alpha", 0.8)
# 窗口标题
# root.title("文本播放器")
# 窗口大小
root.geometry("200x35+100+100")
# 更新显示文本
show_str = stringvar(root)
# 初始显示文本
show_str.set("双击播放")
# 源字符
source_str = text
# 播放标记
playflag = true
 
# 播放位置
pos = 0
# 滚动
def marquee(widget):
    #字符宽度
    textwidth = 18
    # 源字符长度
    strlen = len(source_str)
    # 引用全局变量
    global pos
    # 如果字符长度-播放位置<textwidth
    if strlen - pos < textwidth:
        # 设定显示的字符串为源字符串的(播放位置,播放位置+文本宽度)+ 源字符串的(0,10-字符串长度+播放位置)
        show_str.set(source_str[pos:pos+textwidth] + source_str[0:textwidth - strlen + pos])
    else:
        # 如果大于textwidth,则播放(播放位置,播放位置+文本宽度)的字符
        show_str.set(source_str[pos:pos+textwidth])
    #播放位置+1
    pos += 1
    #如果播放位置大于字符串长度
    if pos > strlen:
        #播放位置设为0
        pos = 0
    # 引用全局变量
    global stopflag
    # 如果当前为播放状态
    if playflag:
        # 睡眠0.3秒后执行滚动函数
        widget.after(300, marquee, widget)
        
# 创建标签
show_lb = label(root, textvariable=show_str,width=300, fg=fgcolor, bg=bgcolor, text=text, font=("consolas", 10))
# 设定标签位置
show_lb.place(x=0, y=0, width=200, height=35)
 
def doubleclicktoplay(event):
   global playflag
   # 播放
   playflag = true
   marquee(show_lb)
 
def playstart():
   global playflag
   # 播放
   playflag = true
   marquee(show_lb)
   
def playstop():
   global playflag
   # 暂停播放
   playflag = false
 
# 创建弹出式菜单
menu = tk.menu(root, tearoff=0)
# 为菜单添加命令标签
menu.add_command(label="播放", command=playstart) 
menu.add_command(label="暂停", command=playstop)
menu.add_command(label="退出", command=exit)
 
def popupmenu(event):
        #在鼠标点击的位置弹出菜单
        menu.post(event.x_root, event.y_root)
 
# 为消息事件(按键、点击)绑定函数
root.bind_all("<buttonrelease-3>", popupmenu) 
 
def movestart(event):
    global startx, starty
    #获取鼠标的点击位置的x、y
    startx = event.x
    starty = event.y
 
def move(event):
     #新坐标=鼠标点击坐标+窗口坐标-初始坐标
    new_x = (event.x) + root.winfo_x() - startx
    new_y = (event.y) + root.winfo_y() - starty
    s = "200x35+" + str(new_x) + "+" + str(new_y)
    # 重新设置窗口大小及其位置
    root.geometry(s)
    
# 为消息事件(按键、点击)绑定函数
root.bind_all("<button-1>", movestart)  
root.bind_all("<b1-motion>", move)
root.bind_all("<double-button-1>", doubleclicktoplay) 
root.mainloop()

注:

如果文本有换行符,切换不会很流畅

可用此方法删除换行符

到此这篇关于python 文本滚动播放器的文章就介绍到这了,更多相关python滚动播放器内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!