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验证码识别的方法
Jul 10 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python命令行解析模块详解
Feb 01 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
利用PyTorch实现VGG16教程
Jun 24 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
4种非常实用的python内置数据结构
Apr 28 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实现Ftp用户的在线管理
2012/02/16 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
跟老齐学Python之变量和参数
2014/10/10 Python
Python求解平方根的方法
2015/03/11 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
pandas 选择某几列的方法
2018/07/03 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
求职自荐信格式
2013/12/04 职场文书
毕业生求职信范文
2014/06/29 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书