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爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
玩转python爬虫之正则表达式
Feb 17 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
PyQt5每天必学之切换按钮
Aug 20 Python
PyQt5响应回车事件的方法
Jun 25 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
Python3常用内置方法代码实例
Nov 18 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
使用Python操作MySQL的小技巧
Sep 10 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python获取命令行参数实例方法讲解
Nov 02 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
php在window iis的莫名问题的测试方法
2013/05/14 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python实现栈的方法
2015/05/26 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
python实现kMeans算法
2017/12/21 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
法学院方阵解说词
2014/01/29 职场文书
中学生打架检讨书
2014/02/10 职场文书
营销计划书
2015/01/17 职场文书
给朋友的赠语
2015/06/23 职场文书
社区干部培训心得体会
2016/01/06 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js