python - Tkinter 和 Turtle 显示对象 - 它们如何交互
问题描述
经过大量的研究和实验,我相信我已经找到了一个使用海龟图形的基于 OOP 的 Tkinter 应用程序的最小可行程序。代码如下。
我想更全面地了解这段代码是如何工作的。
有一大堆显示对象的确切功能我无法理解。
TL; DR:这是正确的:
RawTurtle
需要一个screen
. 屏幕是一个TurtleScreen
。TurtleScreen
需要Canvas
一个.Canvas
需要root
一个. 是的root
一个实例tk.TK()
并且是 a 的一部分Frame
。
?
更多细节:
root
- 它是tk.Tk()
. 就视觉对象而言,这实际上是在创造什么?tk.Frame
- 是根“在”框架还是框架“在”根?看起来构造函数tk.Frame
被root
作为参数调用。他们是什么关系?master
- 和root一样,不是吗?如果是这样,为什么在同一个程序中经常使用不同的名称?Canvas
- 我们为什么需要它?和它有什么关系TurtleScreen?
TurtleScreen
- 那是什么?- 我也看到
RawTurtle.getscreen()
了 - 这如何适应?
import turtle
import tkinter as tk
class App(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master.title("Raw Turtle")
self.pack()
self.canvas = tk.Canvas(root)
self.canvas.config(width=600, height=200)
self.canvas.pack(side=tk.LEFT)
screen = turtle.TurtleScreen(self.canvas)
screen.bgcolor("black")
tur = turtle.RawTurtle(screen, shape="turtle")
tur.color("green")
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
app.mainloop()
解决方案
推荐阅读
- python - 从 SSIS 运行 python 脚本
- python - Python 3:使用多列对数据框进行排名
- javascript - 如何用三元运算符重构它?
- ios - UITableView 的 reloadData 更改约束
- angular - 离子谷歌地图标记JSON不显示
- powershell - Google Identity Platform:使用 Firebase Admin SDK 私钥在 Powershell 中使用 OAuth 2.0
- css - 禁用提交按钮悬停效果
- c++ - QWidget::winId() 返回值在运行时变化的细节
- android - 无法从最终 FirebaseInstanceIdReceiver 继承
- javascript - 为什么这个全局变量不起作用?它可以完美地用作局部变量