tkinter入门,canvas实现百度,抖音,加载
对于tkinter的各个控件,可以参看 : https://blog.csdn.net/weixin_38532159/article/details/78379523
这个已经比较全面了
今天利用tkinter实现一下百度,抖音的加载- – 又是造轮子,首先看一下实现的效果图
导包:
1 from tkinter import * 2 import time
需要注意的是tkinter中的t必须是小写字母
主要控件及自变量:
1 master = Tk() 2 master.title('this is a waitpic Demo') 3 title = Label(master, text='请选择等待图案',font='15',bg='yellow',fg='grey') 4 title.pack(fill=X) 5 6 self.canvaswidth = 1000 7 self.canvasheight = 600 8 self.centerx = self.canvaswidth // 2 9 self.centery = self.canvasheight // 2 10 self.topx = self.centerx - 50 11 self.topy = self.centery -50 12 self.bottomx = self.centerx + 50 13 self.bottomy = self.centery + 50 14 self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White') 15 self.mycanvas.pack() 16 self.mycanvas.create_text(100,20,text='happy life exeryday') 17 18 bt1 = Button(master,text='图案1',command=self.display1) 19 bt2 = Button(master,text='图案2',command=self.display2) 20 btclear = Button(master,text='清空',command=self.clearCanvas) 21 bt1.pack(side=LEFT) 22 bt2.pack(side=LEFT) 23 btclear.pack(side=RIGHT)
主要添加控件的逻辑是:
1.声明一个Tk()对象,或者是frame对象
2.对于控件 : 控件x(tk/frame,**kwargs)
3.对控件进行布局,参见一开始给的博客
添加控件后,记得加上,如此才能有显示
master.mainloop()
对于百度的加载框的实现:
1.实现思路: 三个圆交替,查找API,看到特别有用的move,update—->get~
1 olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red') 2 olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow') 3 olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green') 4 ols = [olred, olyellow, olgreen] 5 movingx , movingy = 0, 1 6 for count in range(4): 7 for i in range(100): 8 self.mycanvas.move(ols[movingx % 3],-2, 0) 9 self.mycanvas.move(ols[movingy % 3],+2, 0) 10 self.mycanvas.update() 11 time.sleep(0.01) 12 for j in range(100): 13 self.mycanvas.move(ols[movingx % 3],+2,0) 14 self.mycanvas.move(ols[movingy % 3],-2,0) 15 self.mycanvas.update() 16 time.sleep(0.01) 17 movingx += 1 18 movingy += 1
对于抖音的加载框的实现:由于抖音刷的太快..我也没看太清楚呢,就先实现成这样.. :有造轮子的大佬可以互相探讨一下
1 sizes = [size for size in range(0,100,5)] 2 ols = [] 3 colors = ['red','green'] 4 cx , cy = 0,1 5 for count in range(10): 6 for offset in sizes: 7 olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset, 8 fill=colors[cx % 2],outline=colors[cx % 2],tag='display2') 9 olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset, 10 fill=colors[cy % 2],outline=colors[cy % 2],tag='display2') 11 ols.append(olleft) 12 ols.append(olright) 13 self.mycanvas.move(olleft,offset,0) 14 self.mycanvas.move(olright,-offset,0) 15 self.mycanvas.update() 16 time.sleep(0.1) 17 18 for ol in ols: 19 self.mycanvas.delete(ol) 20 cx += 1 21 cy += 1
全部代码:
1 from tkinter import * 2 import time 3 4 class wait_: 5 def __init__(self): 6 master = Tk() 7 master.title('this is a waitpic Demo') 8 title = Label(master, text='请选择等待图案',font='15',bg='yellow',fg='grey') 9 title.pack(fill=X) 10 11 self.canvaswidth = 1000 12 self.canvasheight = 600 13 self.centerx = self.canvaswidth // 2 14 self.centery = self.canvasheight // 2 15 self.topx = self.centerx - 50 16 self.topy = self.centery -50 17 self.bottomx = self.centerx + 50 18 self.bottomy = self.centery + 50 19 self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White') 20 self.mycanvas.pack() 21 self.mycanvas.create_text(100,20,text='happy life exeryday') 22 23 bt1 = Button(master,text='图案1',command=self.display1) 24 bt2 = Button(master,text='图案2',command=self.display2) 25 btclear = Button(master,text='清空',command=self.clearCanvas) 26 bt1.pack(side=LEFT) 27 bt2.pack(side=LEFT) 28 btclear.pack(side=RIGHT) 29 30 master.mainloop() 31 32 def display1(self): 33 olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red') 34 olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow') 35 olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green') 36 ols = [olred, olyellow, olgreen] 37 movingx , movingy = 0, 1 38 for count in range(4): 39 for i in range(100): 40 self.mycanvas.move(ols[movingx % 3],-2, 0) 41 self.mycanvas.move(ols[movingy % 3],+2, 0) 42 self.mycanvas.update() 43 time.sleep(0.01) 44 for j in range(100): 45 self.mycanvas.move(ols[movingx % 3],+2,0) 46 self.mycanvas.move(ols[movingy % 3],-2,0) 47 self.mycanvas.update() 48 time.sleep(0.01) 49 movingx += 1 50 movingy += 1 51 52 def display2(self): 53 sizes = [size for size in range(0,100,5)] 54 ols = [] 55 colors = ['red','green'] 56 cx , cy = 0,1 57 for count in range(10): 58 for offset in sizes: 59 olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset, 60 fill=colors[cx % 2],outline=colors[cx % 2],tag='display2') 61 olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset, 62 fill=colors[cy % 2],outline=colors[cy % 2],tag='display2') 63 ols.append(olleft) 64 ols.append(olright) 65 self.mycanvas.move(olleft,offset,0) 66 self.mycanvas.move(olright,-offset,0) 67 self.mycanvas.update() 68 time.sleep(0.1) 69 70 for ol in ols: 71 self.mycanvas.delete(ol) 72 cx += 1 73 cy += 1 74 75 def clearCanvas(self): 76 self.mycanvas.delete('display1','display2') 77 78 wait_()