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 strip lstrip rstrip使用方法
Sep 06 Python
寻找网站后台地址的python脚本
Sep 01 Python
Python配置mysql的教程(推荐)
Oct 13 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
pytorch 输出中间层特征的实例
Aug 17 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python list运算操作代码实例解析
Jan 20 Python
如何基于Python实现数字类型转换
Feb 07 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 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 全局变量范围分析
2009/08/07 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Numpy掩码式数组详解
2018/04/17 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
python dlib人脸识别代码实例
2019/04/04 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
采购内勤岗位职责
2015/04/13 职场文书
监守自盗观后感
2015/06/10 职场文书
人生遥控器观后感
2015/06/11 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL