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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
python基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Python实现决策树C4.5算法的示例
May 30 Python
python3实现基于用户的协同过滤
May 31 Python
python基于物品协同过滤算法实现代码
May 31 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python--shutil移动文件到另一个路径的操作
Jul 13 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数据库的一个类
2012/04/21 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
php适配器模式简单应用示例
2019/10/23 PHP
js 获取时间间隔实现代码
2014/05/12 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
清除输入框内的空格
2016/12/21 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python之list对应元素求和的方法
2018/06/28 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
python接口自动化框架实战
2020/12/23 Python
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
最新教师自我评价分享
2013/11/12 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
党建工作经验交流材料
2014/05/25 职场文书
电力工程合作意向书
2015/05/11 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
公司欠款证明
2015/06/24 职场文书
欢送会主持词
2015/07/01 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
python3实现无权最短路径的方法
2021/05/12 Python