0

我刚刚Tkinter在调试程序时遇到了一个奇怪的行为。如果一个Frame对象是在一个Canvas对象之前创建的,然后又插入到那个对象中Canvas,它就无法显示。但是,如果创建顺序颠倒(先到CanvasFrame),Frame则正确显示 中的内容。

例如,以下代码运行良好:

from Tkinter import *

app = Frame()
canvas = Canvas(app)
frame = Frame(app)
Label(frame, text = 'aaaa').pack()
Label(frame, text = 'bbbb').pack()
canvas.create_window(0, 0, anchor = NW, window = frame)
canvas.grid()
app.grid()
app.mainloop()

但是如果初始化顺序颠倒了,比如:

frame = Frame(app)
canvas = Canvas(app)

你得到的只是一个空白窗口。

这是故意设计的行为(如果是,为什么?),还是我刚刚发现了一个错误Tkinter

4

1 回答 1

1

这是一个特点。小部件具有默认为其创建顺序的堆叠顺序。lift您可以使用和lower方法调整此堆叠顺序。

例如,您可以先创建框架,然后创建画布,使画布具有更高的堆叠顺序。正如您所观察到的,您看不到框架,因为它位于画布后面。要使其可见,您可以lift

frame.lift(canvas)

这样做会产生与您首先创建画布一样的视觉效果。

此技术可用于隐藏和显示小部件。例如,您可以通过将多个框架堆叠在一起来创建一个类似笔记本的小部件,然后使用lift将您想要显示的那个放在订单的顶部。

于 2013-06-15T13:58:27.690 回答