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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
Python打印输出数组中全部元素
Mar 13 Python
python将时分秒转换成秒的实例
Dec 07 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
python与idea的集成的实现
Nov 20 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
python中复数的共轭复数知识点总结
Dec 06 Python
python 使用openpyxl读取excel数据
Feb 18 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 文件类型判断代码
2009/03/13 PHP
PHP教程 预定义变量
2009/10/23 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
在Django框架中编写Context处理器的方法
2015/07/20 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
python路径的写法及目录的获取方式
2019/12/26 Python
python中count函数简单用法
2020/01/05 Python
python画图常规设置方式
2020/03/05 Python
Python 如何展开嵌套的序列
2020/08/01 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
《跨越百年的美丽》教学反思
2014/02/11 职场文书
学生生病请假条范文
2014/02/16 职场文书
党员四风剖析材料
2014/08/27 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
第一节英语课开场白
2015/06/01 职场文书
Python之matplotlib绘制折线图
2022/04/13 Python