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程序中解析并修改XML内容的方法
Nov 16 Python
Python实现登录接口的示例代码
Jul 21 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
详解Python3注释知识点
Feb 19 Python
如何通过python画loss曲线的方法
Jun 26 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python生成并下载文件后端代码实例
Aug 31 Python
解决python3中os.popen()出错的问题
Nov 19 Python
用python修改excel表某一列内容的操作方法
Jun 11 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
上海无线电三厂简史修改版
2021/03/01 无线电
PHP实现图片旋转效果实例代码
2014/10/01 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
JS 的应用开发初探(mootools)
2009/12/19 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
市场营销专业推荐信
2013/11/03 职场文书
自我鉴定书
2014/03/24 职场文书
留学顾问岗位职责
2014/04/14 职场文书
股票投资建议书
2014/05/19 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server