在Python中怎么实现简单的文本播放器
Admin 2022-07-19 群英技术资讯 1242 次浏览
在实际应用中,我们有时候会遇到“在Python中怎么实现简单的文本播放器”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“在Python中怎么实现简单的文本播放器”文章能帮助大家解决问题。效果


双击开始播放,继续双击可以加速播放
右键可以弹出菜单:播放、暂停、退出
左键可以拖动窗口
代码
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()
注:
如果文本有换行符,切换不会很流畅
可用此方法删除换行符
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了Python多线程编程之threading模块详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
用python处理中文,读取文件或消息时,如果发现乱码(字符串处理,读写文件,print),大多数人的做法是,调用encode decode进行调试,并没有
今天给大家分享的是python装饰器的内容,一些新手朋友可能对python装饰器不是很理解,因此这篇文章就给大家来详细的介绍一下什么是python装饰器,为什么要用python装饰器,以及python装饰器用法等等,感兴趣的朋友就继续往下看吧。
ArtistAnimation是基于一组Artist对象的动画类,它通过一帧一帧的数据制作动画。ArtistAnimation类的构造方法的语法格式如下所示
本篇将基于Python+Django结合Vue.js前端框架,为大家介绍如何基于这三者的技术栈来实现一个前端后离的Web开发项目。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008