半透明滚动字幕

半透明滚动字幕

"""
   这是本人制作视频教程,用来在桌面上显示的一个字幕,
   精灵模块初体验__原地踏步猫的字幕效果显示程序
   ,本程序应该直接用tkinter模块编写能更为简单,
   这里只是演示如何重定义类的一些方法。
"""
from sprites import *

# 重定义ScrolledCanvas的初始化方法
def ScrolledCanvas_init(self,master,width=500,height=350,canvwidth=600,canvheight=500):
       """ 把滚动条给去掉了"""
       TK.Frame.__init__(self, master, width=width, height=height)
       self._rootwindow = self.winfo_toplevel()
       self.width, self.height = width, height
       self.canvwidth, self.canvheight = canvwidth, canvheight
       self.bg = "white"
       self._canvas = TK.Canvas(master, width=width, height=height,
                                 bg=self.bg, relief=TK.SUNKEN, borderwidth=2)
       self._canvas.pack(expand=1,fill='both')
       self.reset()
       self._rootwindow.bind('', self.onResize)
       
ScrolledCanvas.__init__ = ScrolledCanvas_init

def ScrolledCanvas_reset(self, canvwidth=None, canvheight=None, bg = None):
        """重置画布"""
        if canvwidth:
            self.canvwidth = canvwidth
        if canvheight:
            self.canvheight = canvheight
        if bg:
            self.bg = bg
        self._canvas.config(bg=bg,
                        scrollregion=(-self.canvwidth//2, -self.canvheight//2,
                                       self.canvwidth//2, self.canvheight//2))
        self._canvas.xview_moveto(0.5*(self.canvwidth - self.width + 30) /
                                                               self.canvwidth)
        self._canvas.yview_moveto(0.5*(self.canvheight- self.height + 30) /
                                                              self.canvheight)
ScrolledCanvas.reset = ScrolledCanvas_reset

def ScrolledCanvas_adjustScrolls(self):
        """ 校正画布尺寸
        """
        cwidth = self._canvas.winfo_width()
        cheight = self._canvas.winfo_height()
        self._canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth)
        self._canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight)

ScrolledCanvas.adjustScrolls = ScrolledCanvas_adjustScrolls

s = 'Python精灵模块初体验__原地踏步猫'
screen = Screen()
screen.bgcolor('red')
screen.titlebar(False)
root = screen._root              # 窗口对象
root.wm_attributes('-alpha',0.7) # 设置窗口为全透明(0到1.0)
screen.setup(800,100)
screen.tracer(0,0)

# 下面的代码让窗口可以拖动.
oldx = 0
oldy = 0
def startmove(event):
    global oldx,oldy
    oldx = event.x
    oldy = event.y
def stopmove(event):
    global oldx,oldy
    oldx = 0
    oldy = 0        
def movewindow(event):
    global oldx,oldy     
    dx = event.x - oldx
    dy = event.y - oldy
    root.move(dx,dy)
screen.cv.bind("", startmove)
screen.cv.bind("", stopmove)
screen.cv.bind("",movewindow)

# 下面的代码按方向箭头则窗口能上下左右移动
screen.onkeypress(lambda:root.move(10),'Right')
screen.onkeypress(lambda:root.move(-10),'Left')
screen.onkeypress(lambda:root.move(0,-10),'Up')
screen.onkeypress(lambda:root.move(0,10),'Down')
screen.listen()

# 下面的TK是就是tkinter
popup = TK.Menu(screen._root, tearoff=0)
popup.add_command(label="关于本程序",command=lambda:showinfo('关于','本程序由李兴球开发\n\nQQ:406273900\n\nwww.lixingqiu.com'))
popup.add_command(label="打开主页",command=lambda:os.system('explorer https://www.lixingqiu.com'))
popup.add_command(label="退出本程序",command=lambda:screen.bye())

def do_popup(event):
    """显示弹出菜单"""
    try:
        popup.tk_popup(event.x_root, event.y_root + 10, 0)
    finally:
        # 确保释放按键
        popup.grab_release()
screen.cv.bind("", do_popup)   # 画布绑定鼠标右键

for x in range(400):
    root.move(0,-1)
    root.update()
    time.sleep(0.01)
# 单击鼠标左键开始
#m1 = Mouse()                # 鼠标左键
#while not m1.down():screen.update()

ft_context = ('微软雅黑',24,'normal')
t = Sprite(visible=False,pos=(-600,-15))
t.color('white')
clock = Clock()
t.write(s,align='center',font=ft_context)
worditem = t.items[-1]                   # 字的编号
wordbbox = screen.cv.bbox(worditem)      # 字的绑定盒子
wordwidth = wordbbox[-1] - wordbbox[0]   # 字的宽度
def scrolledtext():
    t.clear()
    t.write(s,align='center',font=ft_context)
    t.wait()
    t.fd(2)
    if t.xcor() - wordwidth/2 >300:t.setx(-200-wordwidth/2)
    clock.tick(60)
    if t.xcor()==0:t.wait(1)
    screen.ontimer(scrolledtext)
scrolledtext()
screen.mainloop() 

李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。