【问题标题】:tkinter create_window erases previous windowtkinter create_window 擦除前一个窗口
【发布时间】:2013-07-23 18:52:29
【问题描述】:

由于某种原因,当我在我的 Tkinter 画布中转到 create_window 时,它会删除之前在所述窗口中的所有内容,并卡住左上角的窗口(即使我将它设置在其他地方。

canvas.create_window(30, height - 40, anchor = NW, width = 40,
    window = canvas.data.buildSquareButton)

先于

canvas.create_rectangle(0,0,width, 40, fill = "#888888888",
                        outline = "#888888888")
canvas.create_rectangle(0, height, width, (height-40), fill = "#888888888",
                        outline = "#888888888")
canvas.create_rectangle(0, 40, width, (height - 40), fill = "#fffffffff",
                        outline = "#fffffffff")

还有一张图片。

我在 create_window 之后放入了 1 秒 time.sleep,我可以看到按钮被放在了正确的位置。然后在 time.sleep 结束后,按钮将自己扔到右上角,并且矩形从未出现。我注释掉了窗口,矩形看起来很好。

当我调用窗口时我做错了什么,还是有 Tkinter 故障?

【问题讨论】:

  • 您的十六进制颜色值每个必须是 6 个字符。目前,您使用的是 9。您的颜色应如下所示:#RRGGBB 例如:#F3A382

标签: python window tkinter


【解决方案1】:

您的问题中没有足够的信息可以确定。但是,我的猜测是您正在 packing 或 griding 画布中的小部件,这导致画布缩小以适应其内容。或者,您正在做其他事情来导致画布缩小。

更复杂的问题是,您的画布可能与您的主窗口具有相同的背景颜色,因此您认为内容正在被删除,但实际上您正在查看画布的小部件是在而不是画布本身。

为了帮助证明或反驳该理论,请为您的画布添加一个花哨的背景颜色,例如鲜红色。然后运行您的代码,看看屏幕的红色部分会发生什么。

底线:tkinter 中没有会导致您描述的行为的错误。某些代码中存在您未向我们展示的错误。

最好的办法是创建最小的程序来重现问题。仅仅尝试这样做的行为可能会暴露代码中的错误。如果您能够在十几或两行代码中重现它,请更新问题,我们可能会发现错误。

【讨论】:

    【解决方案2】:

    我不完全确定您的问题是什么,但看起来您正试图在代码中的某个位置从画布小部件中删除所有内容,以允许其他内容覆盖它,是吗?

    试试这个重置画布:canvas.delete("all")

    【讨论】:

    • 你不需要调用 get_tk_widget。
    • 虽然,对我来说,使用画布小部件时它看起来像是一种约定。我对这个小部件没有太多经验,所以我不知道get_tk_widget 的重要性。
    • get_tk_widget 是 matplotllib 对象上的方法,而不是标准的 Tkinter 画布。这个问题与matplotlib无关。
    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多