
正文
tkinter入门,canvas实现百度,抖音,加载
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
对于tkinter的各个控件,可以参看 : https://blog.csdn.net/weixin_38532159/article/details/78379523
这个已经比较全面了
今天利用tkinter实现一下百度,抖音的加载- - 又是造轮子,首先看一下实现的效果图
导包:
from tkinter import *
import time
需要注意的是tkinter中的t必须是小写字母
主要控件及自变量:
master = Tk()
master.title('this is a waitpic Demo')
title = Label(master, text='请选择等待图案',font='',bg='yellow',fg='grey')
title.pack(fill=X) self.canvaswidth = 1000
self.canvasheight = 600
self.centerx = self.canvaswidth // 2
self.centery = self.canvasheight // 2
self.topx = self.centerx - 50
self.topy = self.centery -50
self.bottomx = self.centerx + 50
self.bottomy = self.centery + 50
self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White')
self.mycanvas.pack()
self.mycanvas.create_text(100,20,text='happy life exeryday') bt1 = Button(master,text='图案1',command=self.display1)
bt2 = Button(master,text='图案2',command=self.display2)
btclear = Button(master,text='清空',command=self.clearCanvas)
bt1.pack(side=LEFT)
bt2.pack(side=LEFT)
btclear.pack(side=RIGHT)
主要添加控件的逻辑是:
1.声明一个Tk()对象,或者是frame对象
2.对于控件 : 控件x(tk/frame,**kwargs)
3.对控件进行布局,参见一开始给的博客
添加控件后,记得加上,如此才能有显示
master.mainloop()
对于百度的加载框的实现:
1.实现思路: 三个圆交替,查找API,看到特别有用的move,update---->get~
olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red')
olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow')
olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green')
ols = [olred, olyellow, olgreen]
movingx , movingy = 0, 1
for count in range(4):
for i in range(100):
self.mycanvas.move(ols[movingx % 3],-2, 0)
self.mycanvas.move(ols[movingy % 3],+2, 0)
self.mycanvas.update()
time.sleep(0.01)
for j in range(100):
self.mycanvas.move(ols[movingx % 3],+2,0)
self.mycanvas.move(ols[movingy % 3],-2,0)
self.mycanvas.update()
time.sleep(0.01)
movingx += 1
movingy += 1
对于抖音的加载框的实现:由于抖音刷的太快..我也没看太清楚呢,就先实现成这样.. :有造轮子的大佬可以互相探讨一下
sizes = [size for size in range(0,100,5)]
ols = []
colors = ['red','green']
cx , cy = 0,1
for count in range(10):
for offset in sizes:
olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset,
fill=colors[cx % 2],outline=colors[cx % 2],tag='display2')
olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset,
fill=colors[cy % 2],outline=colors[cy % 2],tag='display2')
ols.append(olleft)
ols.append(olright)
self.mycanvas.move(olleft,offset,0)
self.mycanvas.move(olright,-offset,0)
self.mycanvas.update()
time.sleep(0.1) for ol in ols:
self.mycanvas.delete(ol)
cx += 1
cy += 1
全部代码:
from tkinter import *
import time class wait_:
def __init__(self):
master = Tk()
master.title('this is a waitpic Demo')
title = Label(master, text='请选择等待图案',font='',bg='yellow',fg='grey')
title.pack(fill=X) self.canvaswidth = 1000
self.canvasheight = 600
self.centerx = self.canvaswidth // 2
self.centery = self.canvasheight // 2
self.topx = self.centerx - 50
self.topy = self.centery -50
self.bottomx = self.centerx + 50
self.bottomy = self.centery + 50
self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White')
self.mycanvas.pack()
self.mycanvas.create_text(100,20,text='happy life exeryday') bt1 = Button(master,text='图案1',command=self.display1)
bt2 = Button(master,text='图案2',command=self.display2)
btclear = Button(master,text='清空',command=self.clearCanvas)
bt1.pack(side=LEFT)
bt2.pack(side=LEFT)
btclear.pack(side=RIGHT) master.mainloop() def display1(self):
olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red')
olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow')
olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green')
ols = [olred, olyellow, olgreen]
movingx , movingy = 0, 1
for count in range(4):
for i in range(100):
self.mycanvas.move(ols[movingx % 3],-2, 0)
self.mycanvas.move(ols[movingy % 3],+2, 0)
self.mycanvas.update()
time.sleep(0.01)
for j in range(100):
self.mycanvas.move(ols[movingx % 3],+2,0)
self.mycanvas.move(ols[movingy % 3],-2,0)
self.mycanvas.update()
time.sleep(0.01)
movingx += 1
movingy += 1 def display2(self):
sizes = [size for size in range(0,100,5)]
ols = []
colors = ['red','green']
cx , cy = 0,1
for count in range(10):
for offset in sizes:
olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset,
fill=colors[cx % 2],outline=colors[cx % 2],tag='display2')
olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset,
fill=colors[cy % 2],outline=colors[cy % 2],tag='display2')
ols.append(olleft)
ols.append(olright)
self.mycanvas.move(olleft,offset,0)
self.mycanvas.move(olright,-offset,0)
self.mycanvas.update()
time.sleep(0.1) for ol in ols:
self.mycanvas.delete(ol)
cx += 1
cy += 1 def clearCanvas(self):
self.mycanvas.delete('display1','display2') wait_()








