Python 文本滚动播放器的实现代码


Posted in Python onApril 25, 2021

效果

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()

注:

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

可用此方法删除换行符

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

Python 相关文章推荐
Python实现获取网站PR及百度权重
Jan 21 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python&amp;MongoDB爬取图书馆借阅记录
Feb 05 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
Python基于Opencv识别两张相似图片
matplotlib之pyplot模块实现添加子图subplot的使用
python实现简单区块链结构
python实现图片九宫格分割的示例
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 #Python
浅谈Python项目的服务器部署
Apr 25 #Python
Python Socket编程详解
Apr 25 #Python
You might like
php仿discuz分页效果代码
2008/10/02 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
python机器学习之神经网络(二)
2017/12/20 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
python中的对数log函数表示及用法
2020/12/09 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
高三自我评价
2014/02/01 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
优秀教师个人总结
2015/02/11 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
Python加密技术之RSA加密解密的实现
2022/04/08 Python