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闭包及其作用域详解
Aug 28 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
Python键盘输入转换为列表的实例
Jun 23 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python os.path模块常用方法实例详解
Sep 16 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
python如何将多个PDF进行合并
Aug 13 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Django DRF APIView源码运行流程详解
Aug 17 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 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
php经典算法集锦
2015/11/14 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
再论Javascript的类继承
2011/03/05 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
运动会领导邀请函
2014/01/10 职场文书
大学生心理活动总结
2014/07/04 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
SQL Server表分区删除详情
2021/10/16 SQL Server