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 OS模块常用函数说明
May 23 Python
Python操作串口的方法
Jun 17 Python
python开发之thread线程基础实例入门
Nov 11 Python
Python实现一个简单的验证码程序
Nov 03 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python web框架 django wsgi原理解析
Aug 20 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
python 命令行传参方法总结
May 25 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
js树形控件脚本代码
2008/07/24 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
基于Python List的赋值方法
2018/06/23 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Python中logger日志模块详解
2020/08/04 Python
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
编辑求职信样本
2013/12/16 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
清明节寄语2015
2015/03/23 职场文书
被委托人身份证明
2015/08/07 职场文书
科级干部培训心得体会
2016/01/06 职场文书