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测试人员需要掌握的知识
Feb 08 Python
python matlibplot绘制3D图形
Jul 02 Python
python处理数据,存进hive表的方法
Jul 04 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
Python自定义一个异常类的方法
Jun 27 Python
python匿名函数的使用方法解析
Oct 10 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
python3中编码获取网页的实例方法
Nov 16 Python
图文详解matlab原始处理图像几何变换
Jul 09 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
Symfony学习十分钟入门经典教程
2016/02/03 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
JS中 用户登录系统的解决办法
2013/04/15 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python 获取list特定元素下标的实例讲解
2018/04/09 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
GMP办公室主任岗位职责
2014/03/14 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2015大学生求职信范文
2015/03/20 职场文书
入党积极分子考察意见
2015/06/02 职场文书
班委竞选稿范文
2015/11/21 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫
如何使用SQL Server语句创建表
2022/04/12 SQL Server
我去timi了,一起去timi是什么意思?
2022/04/13 杂记