1

出于某种原因,当我在我的 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 故障?

4

2 回答 2

0

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

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

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

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

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

于 2013-07-24T00:41:26.407 回答
-1

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

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

于 2013-07-24T01:21:49.277 回答