【问题标题】:Python turtle get tkinter rootPython 乌龟获取 tkinter 根
【发布时间】:2016-03-04 09:59:43
【问题描述】:

Python 乌龟与 tkinter 一起工作。如何从 tkinter 获取您知道的 root? 像这样:

import tkinter
root = tkinter.Tk()

但对于乌龟。

【问题讨论】:

    标签: python tkinter turtle-graphics


    【解决方案1】:

    通过海龟画布的winfo_toplevel 方法可以获得*小部件:

    import turtle
    
    canvas = turtle.getcanvas()
    root = canvas.winfo_toplevel()
    

    它是Tk的子类型:

    import tkinter
    
    assert type(root) is turtle._Root
    assert isinstance(root, tkinter.Tk)
    

    【讨论】:

    • 感谢您的指正!非常有趣的是,有 5k 代表使用海龟/有使用它的知识的人。
    • 其实,我在研究this answer 时发现了你的问题。 :-) 这也是我注意到您的回答错误的原因:我无法致电turtle.getcanvas().protocol()
    【解决方案2】:

    正如@das-g指出的那样

    root = turtle.getcanvas().winfo_toplevel()
    

    给你一个代表海龟根窗口的对象。


    但是,如果您的用例是将海龟图形与成熟的 Tkinter 应用程序集成,则应始终首选显式方法:

    from tkinter import *
    import turtle
    
    root = Tk()
    turtle_canvas = turtle.Canvas(root)
    turtle_canvas.pack(fill=BOTH, expand=True) # fill the entire window
    
    protagonist = turtle.RawTurtle(turtle_canvas)
    protagonist.fd(100) # etc.
    

    这增加了能够控制海龟画布的位置和大小的额外好处。此外,拥有明确的代码有助于其他人理解它。

    【讨论】:

      【解决方案3】:
      turtle.getcanvas()
      

      返回您正在(我正在)寻找的对象。

      【讨论】:

      • 返回画布,它不是*小部件:assert not isinstance(turtle.getcanvas(), tkinter.Tk)