【问题标题】:"Undecorate" Turtle Window“不装饰”龟窗
【发布时间】:2016-08-12 07:48:22
【问题描述】:

为了一个科学实验,我写了一个turtle.py,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py 在 cmd 中以 C:\Users\kaza>python C:\Users\kaza\Desktop\Python_scripts\turtle.py "black" 900 40 1 20 20 10 0 0 30 10 开头。 black和命令后面的数字是dot的参数,调节dot的生长速度、maxsize等参数。

如果我执行 cmd,窗口打开,turtle.py 开始绘制。屏幕尺寸为 800x480,因此窗口覆盖了整个屏幕。唯一困扰我的是菜单栏。通过单击它并选择“未装饰”,我可以让它消失,但我无法找到一种方法来启动未装饰的窗口。 turtle.py 应该同时在 12 个树莓上启动,并且不可能运行到每个树莓并取消装饰窗口。

我已经尝试修改 openbox 的 rc.xml 但没有任何改变。是否有 cmd 命令可以在未装饰的窗口中自动启动turtle.py

【问题讨论】:

  • 猜测:turtle 使用Tkinter,您可以在其窗口上调用.overrideredirect(True) 来移除装饰。 Here's 另一个例子。
  • 我已经尝试使用overrideredirect但出现错误'TurtleScreen' object has no attribute 'overrideredirect'还有其他解决方案吗?
  • turtle.Screen().getcanvas()._root().overrideredirect(True) 为我工作。这不是最好的方法(您不应该接触任何名称以 _ 开头的成员),但如果您希望它暂时工作...
  • 感谢@Rhymoid 的成功!
  • 也许你可以“正式”回答这个问题?

标签: python turtle-graphics


【解决方案1】:

标准模块turtle 使用Tk(通过Python 中的Tkinter 模块)作为其窗口。当您想要取消装饰 Tk 窗口时,您可以使用 Toplevel 类的 overrideredirect 方法。这是在an answer to a similar question 中提出的。来自the documentation of Tkinter

如果使用True 参数调用此方法,则此方法会设置覆盖重定向标志,这会从窗口中删除所有窗口管理器装饰,使其无法移动、调整大小、图标化或关闭。如果使用False 参数调用,则恢复窗口管理器装饰并清除覆盖重定向标志。如果不带参数调用,则返回覆盖重定向标志的当前状态。

在设置此标志之前,请务必调用 .update_idletasks() 方法(请参阅第 26 节,“通用小部件方法”)。如果你在进入主循环之前调用它,你的窗口会在它出现之前被禁用。

此方法可能不适用于某些 Unix 和 MacOS 平台。

请注意,窗口是still resizable,但不是通过平台的窗口管理器。

访问此方法的快速而肮脏的方法是说

turtle.Screen().get‌​canvas()._root().over‌​rideredirect(True)

创建窗口之后(以避免需要上述.update_idletasks() 解决方法)。

通常,名称开头的_ 表示不应触摸该成员。但是,根据the documentation of Tkinter,这是进入根窗口的方法:

要访问包含给定窗口小部件的顶级窗口,您通常只需引用该窗口小部件的主窗口即可。当然,如果小部件已被打包在框架内,则主窗口不会代表顶层窗口。要访问包含任意小部件的顶层窗口,您可以调用_root() 方法。此方法以下划线开头,表示此函数是实现的一部分,而不是 Tk 功能的接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多