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学习日志--摆动吧!钟摆!相关推荐

  1. Python学习日志12 - 办公自动化

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志12课 - 办公自动 ...

  2. Python学习日志16 - 数据库SQL查询

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...

  3. python 学习日志(3)旋转角--改进

    python 学习日志(3)旋转角–改进 啊!都看网上说if -else非常令人头疼,今天终于感受到了: def xuan_zhuan_jiao_qiu_zhi_1_9():print(small * ...

  4. Python学习日志08 - 字典

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志08课 - 字典 前言 进入正题 创 ...

  5. Python学习日志10 - 高阶函数和高级应用

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...

  6. Python学习日志04 - 列表

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第04课:Python的容器型数据类型 进入今天的正题 ...

  7. Python学习日志 3.5

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 第3.5课:Python分支结构和循环结构的应用 例子1 ...

  8. Python学习日志9月14日

    今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...

  9. python学习日志3--ARIMA时间序列模型预测

    前言 这篇文章主要讲述如何使用python实现时间序列ARIMA预测算法 一.代码 代码如下(示例): #跟着视频学习的代码,记录一下. import numpy as np import panda ...

最新文章

  1. 多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
  2. Elasticsearch实现原理分析
  3. 实用知识点梳理:网络操作系统、HTTPS、交换机中用户权限、路由器与集线器功能、HTTP2.0特性
  4. 两个结构体ifconf和ifreq
  5. 8086汇编求一组正整数{0x1223,0x1234,0x1434,0x2345,0x3412,0x1712}中的最大数并存在变量MAX中
  6. [轉]Exploit Linux Kernel Slub Overflow
  7. 与孩子一起学编程03章
  8. VC++进行ActiveX控件的开发
  9. 扫描全能王添加头像的方法
  10. python实践周总结_Python 一周总结
  11. 把台式计算机硬盘拆下,台式电脑的硬盘可以拆下来吗
  12. 索尼和南卡蓝牙耳机哪款比较好?降噪效果好的蓝牙耳机测评
  13. c语言初学——运算符和表达式
  14. Java BIO的基本介绍
  15. 注册hotmail.co .jp后缀的hotmail邮箱
  16. python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)
  17. C语言程序怎么读取亮度值,颜色空间RGB与 色调、饱和度、亮度(ESL)转换的完整C语言算法...
  18. Hutool操作和监听文件
  19. 结合GIS+BIM数字孪生应用,将构建智慧综合管廊工程三维渲染新高地
  20. oracle如何查看表中索引

热门文章

  1. dpkg-checkbuilddeps: error: Unmet build dependencies: libtest-mockmodule-perl
  2. Python——时间与时间戳之间的转换
  3. 阿里云研究中心主任田丰: 如何从实体经济走向智能产业
  4. 写在十九岁生日的23:31。
  5. python读取EXCEL的方式
  6. 5000的游戏电脑计算机配置,5000元电脑配置单,5000游戏电脑配置,直播电脑配置
  7. 半监督学习之伪标签(pseudo label,entropy minimization,self-training)
  8. 软件测试面试题避雷(HR面试题)最常见的面试问题和技巧性答复
  9. 台式计算机无线网经常掉线,电脑无线网老是掉线怎么办?教你解决掉线问题
  10. Hibernate第九篇【组件映射、继承映射】