Python学习日志--摆动吧!钟摆!
Python学习日志–摆动吧!钟摆!
由于读研跟着导师搞人工智能方向,所以开始学习python,在学习到使用到tkinter进行GUI设计这部分的时候,有一道很有意思的编程题:用tkinter动态演示钟摆的摆动(钟摆摆起来的时候是很有意思啊!),本题要求我们按方向键上(即Up键)加速钟摆摆速,按方向键下(即Down键)减速,按S键(注意是大写S)停止动画,按R键(大写)重新开始摆动,我的代码如下:
from tkinter import *
import math
class Pendulum:def __init__(self):window = Tk() #创建窗口window.title("Pendulum")self.canvas = Canvas(window , width = 700 , height = 500 , bg = "white") #创建画布self.canvas.pack()self.canvas.create_oval(317,47,323,53,fill = "black" , tags = "center") #画出钟摆中心点self.x1 = 320 #x1 , y1为钟摆不动端端点self.y1 = 50self.radius = 350 #钟摆长度self.degree = 120 #控制钟摆摆动角度self.sleep = 100 #程序休眠时长,即控制摆动速度的变量flag = True #控制钟摆摆动方向self.con = True #控制钟摆启止self.canvas.bind("<Up>", self.up) #按键与事件绑定self.canvas.bind("<Down>", self.down)self.canvas.bind("<S>", self.stop)self.canvas.bind("<R>", self.restart)self.canvas.focus_set() #设置焦点,这一步不能忘,否则按键失效while self.con: #钟摆摆动循环self.canvas.delete("line" , "oval")x2 = self.radius*math.sin(math.radians(self.degree))+self.x1y2 = -self.radius*math.cos(math.radians(self.degree))+self.y1self.canvas.create_line(self.x1 , self.y1 , x2 , y2 , tags = "line")self.canvas.create_oval(x2-10 , y2-10 , x2+10 , y2+10 ,fill = "black" , tags = "oval")if self.degree <= 120:flag = Trueif self.degree >= 240:flag = Falseif flag == True:self.degree += 10else:self.degree -= 10self.canvas.after(self.sleep)self.canvas.update()window.mainloop()def up(self , event):if self.sleep > 0:self.sleep -= 20def down(self , event):if self.sleep < 300:self.sleep += 20def stop(self , event):self.con = Falsedef restart(self , event):self.con = Truewhile self.con:self.canvas.delete("line" , "oval")x2 = self.radius*math.sin(math.radians(self.degree))+self.x1y2 = -self.radius*math.cos(math.radians(self.degree))+self.y1self.canvas.create_line(self.x1 , self.y1 , x2 , y2 , tags = "line")self.canvas.create_oval(x2-10 , y2-10 , x2+10 , y2+10 ,fill = "black" , tags = "oval")if self.degree <= 120:flag = Trueif self.degree >= 240:flag = Falseif flag == True:self.degree += 30else:self.degree -= 30self.canvas.after(self.sleep)self.canvas.update()
Pendulum()
其实就是一个很简单的画布刷新操作的应用,我们限制钟摆在210-350度之间摆动(水平向右为0度),并且设置一个变量flag来控制其是向左还是向右摆动,变量con则控制钟摆的启动和停止,具体代码解释在注释中已经写清,值得注意的是,在我们停止钟摆再重新启动时,不能只将con赋为True而必须再写一次循环,钟摆才能再次摆动。
总结下来整个代码写的还是累赘而又粗糙,之后若有时间值得再优化,仅作记录,若能博君一笑,不胜荣幸,若有帮助,吾亦感开怀。
Python学习日志--摆动吧!钟摆!相关推荐
- Python学习日志12 - 办公自动化
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志12课 - 办公自动 ...
- Python学习日志16 - 数据库SQL查询
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...
- python 学习日志(3)旋转角--改进
python 学习日志(3)旋转角–改进 啊!都看网上说if -else非常令人头疼,今天终于感受到了: def xuan_zhuan_jiao_qiu_zhi_1_9():print(small * ...
- Python学习日志08 - 字典
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志08课 - 字典 前言 进入正题 创 ...
- Python学习日志10 - 高阶函数和高级应用
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...
- Python学习日志04 - 列表
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第04课:Python的容器型数据类型 进入今天的正题 ...
- Python学习日志 3.5
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第3.5课:Python分支结构和循环结构的应用 例子1 ...
- Python学习日志9月14日
今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...
- python学习日志3--ARIMA时间序列模型预测
前言 这篇文章主要讲述如何使用python实现时间序列ARIMA预测算法 一.代码 代码如下(示例): #跟着视频学习的代码,记录一下. import numpy as np import panda ...
最新文章
- 多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
- Elasticsearch实现原理分析
- 实用知识点梳理:网络操作系统、HTTPS、交换机中用户权限、路由器与集线器功能、HTTP2.0特性
- 两个结构体ifconf和ifreq
- 8086汇编求一组正整数{0x1223,0x1234,0x1434,0x2345,0x3412,0x1712}中的最大数并存在变量MAX中
- [轉]Exploit Linux Kernel Slub Overflow
- 与孩子一起学编程03章
- VC++进行ActiveX控件的开发
- 扫描全能王添加头像的方法
- python实践周总结_Python 一周总结
- 把台式计算机硬盘拆下,台式电脑的硬盘可以拆下来吗
- 索尼和南卡蓝牙耳机哪款比较好?降噪效果好的蓝牙耳机测评
- c语言初学——运算符和表达式
- Java BIO的基本介绍
- 注册hotmail.co .jp后缀的hotmail邮箱
- python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)
- C语言程序怎么读取亮度值,颜色空间RGB与 色调、饱和度、亮度(ESL)转换的完整C语言算法...
- Hutool操作和监听文件
- 结合GIS+BIM数字孪生应用,将构建智慧综合管廊工程三维渲染新高地
- oracle如何查看表中索引
热门文章
- dpkg-checkbuilddeps: error: Unmet build dependencies: libtest-mockmodule-perl
- Python——时间与时间戳之间的转换
- 阿里云研究中心主任田丰: 如何从实体经济走向智能产业
- 写在十九岁生日的23:31。
- python读取EXCEL的方式
- 5000的游戏电脑计算机配置,5000元电脑配置单,5000游戏电脑配置,直播电脑配置
- 半监督学习之伪标签(pseudo label,entropy minimization,self-training)
- 软件测试面试题避雷(HR面试题)最常见的面试问题和技巧性答复
- 台式计算机无线网经常掉线,电脑无线网老是掉线怎么办?教你解决掉线问题
- Hibernate第九篇【组件映射、继承映射】