Tkinter中的mainloop应该如何理解?
来源:互联网 发布:南方大数据100指数雪球 编辑:程序博客网 时间:2024/05/19 22:59
很简单。你把鼠标一个按上会变成手型。或者你在知乎回答问题的文本框里输入文字。甚至你看到的电脑屏幕内容。看上去是动态的。其实和动画电影原理差不多。
现在你鼠标的移动,键盘的按键。都是实实在在输入。这里我们叫做事件。譬如有鼠标移动事件,单击事件,F5按下的事件。
以回答问题 按钮<发布回答>左侧的匿名勾选框为例。你单击一次,就绿色小勾表示选中。再单击就去掉了小勾。现在你这样想。实际上有两幅图(有勾和无勾的)。你单击鼠标移动鼠标就触发了事件,会把你鼠标的坐标和单击这个行为捕获。那假设你单击了,鼠标坐标又在那个框框区域内,我们就把一张图用另外一张图代替,同时后台表示是否匿名的某个变量取反。
root到root.pack()之间,无非就是设计你的部件的类型,尺寸,样式,位置,然后绑定一个事件。
mainloop就进入到事件(消息)循环。一旦检测到事件,就刷新组件。譬如你输入一个字符,就要立即在光标那个位置显示出来(前提是你选中了文本框,也就是鼠标在文本框这个图案的范围内单击过)。又譬如你点了首页这个按钮(就是在这个图形的区域附近单击)那么就要清除你浏览器里的全部部件,然后重新绘制(按照主页设计的布局和内容)。
再给你打个比方。你设计的程序中间有个按钮,你设计的时候就要把一个按钮放到中间去。这个按钮有一个属性(假设和变量x关联,x表示按钮上文字的颜色,如果是1就黑色,0就灰色)。你按一下按钮,文字颜色就会切换。root到root.pack()你就相当于在那里放按钮(其实按钮就是多幅图,某一时刻显示其中一张),具体颜色看x取值。现在到了mainloop。一旦有事件,就又在那里放按钮(不妨直接覆盖原来的图)。所以在那个位置单击鼠标才是触发某个你想要的程序行为的要素,那个按钮的刷新,不过是其中一项程序行为。有没有按钮你都可以点击那个区域触发。但是除了设计者,谁知道呢?无法是视觉效果罢了。
PS:如果你知道连环画,你可以理解为,每个部件都是连环画。root到root.pack()就是你设计连环画。mainloop就是去翻它!实际上不是有很多程序有一个选项就是 动画效果么,关闭可以减少资源消耗。无非就是连环画的页数多。快速翻阅就有动感。如果只有两页,看上去很唐突而已。
pps:前面也说了,你看到电脑屏幕也是如此,是不停在刷新的。一般是50-60hz每秒。游戏里不有一个fps么,桢率 就是画面的刷新频率,太慢不就会卡顿么(和网络卡不是一回事)。然后屏幕还有局部刷新的技术,不一定每次都刷新整块屏幕。设计的程序也是。你可以所有组件每次事件都重新画。也可以只是画你需要的部分。
- Tkinter中的mainloop应该如何理解?
- MainLoop
- mainLoop
- 应该如何理解Web2.0标准
- 初学者应该如何理解PHP框架
- 学习java应该如何理解反射?
- 学习java应该如何理解反射?
- nginx异步非阻塞应该如何理解?
- 学习java应该如何理解反射
- 学习java应该如何理解反射?
- 我们应该怎样理解:Java中的 “.*;” ???
- 我应该怎样理解:java中的new???
- MFC中的InitInstance()函数应该怎样理解
- Tkinter中的button使用
- python中的Tkinter
- Python图形GUI工具包tkinter如何调整元件在窗口中的位置几何布局管理
- Python图形GUI工具包tkinter如何调整元件在窗口中的位置几何布局管理
- mainloop函数
- 对C++翻转课堂的感悟
- mongo 查找附近点
- Java中删除文件、删除目录及目录下所有文件
- 关于虚拟机的一些镜像格式
- 在Linux系统上搭建一个SVN服务器
- Tkinter中的mainloop应该如何理解?
- MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊
- Android工具类系列-ToastUtil
- 链表后半部分反转(2016亚信实习生笔试题)
- Log4j.properties配置详解
- 批处理脚本编写
- 扩展欧几里德
- 验证当前日期是否为一年中最后一天,否则,默认返回当前日期前一年的最后一天日期
- 百度鹰眼Android SDK 运行配置