zoukankan      html  css  js  c++  java
  • 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_()
  • 相关阅读:
    day23
    day22
    day21
    day20
    day19
    day18
    day17
    day16
    day15
    PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
  • 原文地址:https://www.cnblogs.com/whyaza/p/9510536.html
Copyright © 2011-2022 走看看