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专用方法与迭代机制实例分析
Sep 15 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
Python csv文件的读写操作实例详解
Nov 19 Python
python字符串替换re.sub()实例解析
Feb 09 Python
python实现滑雪者小游戏
Feb 22 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
python梯度下降算法的实现
Feb 24 Python
Python Json数据文件操作原理解析
May 09 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
python调用百度API实现人脸识别
Nov 17 Python
Python绘制分类图的方法
Apr 20 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
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
js使用eval解析json(js中使用json)
2014/01/17 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
Python实现求笛卡尔乘积的方法
2017/09/16 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Django保护敏感信息的方法示例
2019/05/09 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
操行评语大全
2014/04/30 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
企业年检委托书范本
2014/10/14 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL