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 08 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
python实现ID3决策树算法
Aug 29 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
python批量修改交换机密码的示例
Sep 22 Python
分享一个python的aes加密代码
Dec 22 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python APScheduler执行定时任务介绍
Apr 19 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数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
敬老月活动总结
2014/08/28 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android