Python 文本滾動(dòng)播放器的實(shí)現(xiàn)代碼
效果
雙擊開(kāi)始播放,繼續(xù)雙擊可以加速播放
右鍵可以彈出菜單:播放、暫停、退出
左鍵可以拖動(dòng)窗口
代碼
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: # 按字節(jié)讀 text = f.read() #獲取一行 getText() root = Tk() # 窗口設(shè)定為無(wú)邊框 root.overrideredirect(True) # 窗口前置 root.wm_attributes("-topmost", 1) # 窗口屬性 透明度設(shè)置 root.attributes("-alpha", 0.8) # 窗口標(biāo)題 # root.title("文本播放器") # 窗口大小 root.geometry("200x35+100+100") # 更新顯示文本 show_str = StringVar(root) # 初始顯示文本 show_str.set("雙擊播放") # 源字符 source_str = text # 播放標(biāo)記 playflag = True # 播放位置 pos = 0 # 滾動(dòng) def marquee(widget): #字符寬度 textwidth = 18 # 源字符長(zhǎng)度 strlen = len(source_str) # 引用全局變量 global pos # 如果字符長(zhǎng)度-播放位置<textwidth if strlen - pos < textwidth: # 設(shè)定顯示的字符串為源字符串的(播放位置,播放位置+文本寬度)+ 源字符串的(0,10-字符串長(zhǎng)度+播放位置) 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 #如果播放位置大于字符串長(zhǎng)度 if pos > strlen: #播放位置設(shè)為0 pos = 0 # 引用全局變量 global stopflag # 如果當(dāng)前為播放狀態(tài) if playflag: # 睡眠0.3秒后執(zhí)行滾動(dòng)函數(shù) widget.after(300, marquee, widget) # 創(chuàng)建標(biāo)簽 show_lb = Label(root, textvariable=show_str,width=300, fg=fgcolor, bg=bgcolor, text=text, font=("Consolas", 10)) # 設(shè)定標(biāo)簽位置 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 # 創(chuàng)建彈出式菜單 menu = tk.Menu(root, tearoff=0) # 為菜單添加命令標(biāo)簽 menu.add_command(label="播放", command=playStart) menu.add_command(label="暫停", command=playStop) menu.add_command(label="退出", command=exit) def popUpMenu(event): #在鼠標(biāo)點(diǎn)擊的位置彈出菜單 menu.post(event.x_root, event.y_root) # 為消息事件(按鍵、點(diǎn)擊)綁定函數(shù) root.bind_all("<ButtonRelease-3>", popUpMenu) def moveStart(event): global startX, startY #獲取鼠標(biāo)的點(diǎn)擊位置的x、y startX = event.x startY = event.y def move(event): #新坐標(biāo)=鼠標(biāo)點(diǎn)擊坐標(biāo)+窗口坐標(biāo)-初始坐標(biāo) new_x = (event.x) + root.winfo_x() - startX new_y = (event.y) + root.winfo_y() - startY s = "200x35+" + str(new_x) + "+" + str(new_y) # 重新設(shè)置窗口大小及其位置 root.geometry(s) # 為消息事件(按鍵、點(diǎn)擊)綁定函數(shù) root.bind_all("<Button-1>", moveStart) root.bind_all("<B1-Motion>", move) root.bind_all("<Double-Button-1>", doubleClicktoPlay) root.mainloop()
注:
如果文本有換行符,切換不會(huì)很流暢
可用此方法刪除換行符
到此這篇關(guān)于Python 文本滾動(dòng)播放器的文章就介紹到這了,更多相關(guān)Python滾動(dòng)播放器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python?Prophet時(shí)間序列預(yù)測(cè)工具庫(kù)使用功能探索
Python?Prophet是一個(gè)強(qiáng)大的時(shí)間序列預(yù)測(cè)工具,由Facebook開(kāi)發(fā),具有易用性和高度可定制性的特點(diǎn),本文將深入介紹Python?Prophet的基本概念、安裝方法以及如何使用它進(jìn)行時(shí)間序列預(yù)測(cè),并提供豐富的示例代碼來(lái)幫助大家入門(mén)2024-01-01通過(guò)實(shí)例了解python__slots__使用方法
這篇文章主要介紹了通過(guò)實(shí)例了解python__slots__使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Django數(shù)據(jù)庫(kù)類(lèi)庫(kù)MySQLdb使用詳解
Django項(xiàng)目要操作數(shù)據(jù)庫(kù),首先要和數(shù)據(jù)庫(kù)建立連接,才能讓程序中的數(shù)據(jù)和數(shù)據(jù)庫(kù)關(guān)聯(lián)起來(lái)進(jìn)行數(shù)據(jù)的增刪改查操作。這篇文章主要介紹了Django數(shù)據(jù)庫(kù)類(lèi)庫(kù)MySQLdb使用詳解,感興趣的小伙伴們可以參考一下2019-04-04Python實(shí)現(xiàn)輕松提取Word中的圖片
Microsoft Word是廣泛用于文檔編輯和處理的工具,有時(shí)候,可能需要從Word文檔中提取所有的圖片,以進(jìn)行后續(xù)的處理或分析,本文主要介紹了如何使用Python實(shí)現(xiàn)這一操作,需要的可以參考下2024-01-01Python+OpenCV實(shí)現(xiàn)六種常用圖像特效
這篇文章主要為大家介紹了用Python和OpenCV實(shí)現(xiàn)的六種常見(jiàn)圖像特效:圖像融合、灰度處理、馬賽克效果、浮雕效果、毛玻璃效果和顏色反轉(zhuǎn),需要的可以參考一下2022-05-05Python實(shí)現(xiàn)Windows和Linux之間互相傳輸文件(文件夾)的方法
下面小編就為大家?guī)?lái)一篇Python實(shí)現(xiàn)Windows和Linux之間互相傳輸文件(文件夾)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05