tkinter入门,canvas实现百度,抖音,加载
时间:2018-08-21
本文章向大家介绍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_()
- java: web应用中不经意的内存泄露
- velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
- mac上开启ftp
- Web前端开发的四个阶段
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 关于把本地应用封装成windows app发布审核通不过的问题
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- 解决WordPress缩略图插件timthumb不支持站外图片的问题
- 让 http 2来得更猛烈些吧
- SQL Server 2008基于策略的管理
- centos系统安装Python
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊dubbo-go的forkingCluster
- 还在用 map[string]interface{} 处理 JSON?告诉你一个更高效的方法——jsonvalue
- 聊聊dubbo-go的failsafeCluster
- 【HDFS】distcp报错Check0sum mismatch
- ffmpeg转换多媒体文件,真香
- 静态库与动态库的那些事
- 云服务器网络延迟与丢包问题定位(mtr工具)
- Spark UDF1 输入复杂结构
- Qt音视频开发6-ffmpeg解码处理
- MySQL 百万级数据量分页查询方法及其优化
- 教你设计一个超牛逼的本地缓存!
- Flutter延时任务、Flutter通过Future与Timer实现延时任务
- DDIA 笔记
- 工作流和状态机
- CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境系统