我在调试程序时遇到了Tkinter
的奇怪行为。如果在Frame
对象之前创建Canvas
对象,然后将其插入Canvas
,则无法显示该对象。但是,如果创建顺序被反转(首先Canvas
然后Frame
),则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
中发现错误?
答案 0 :(得分:1)
这是一个功能。窗口小部件具有默认为创建顺序的堆叠顺序。您可以使用lift
和lower
方法调整此堆叠顺序。
例如,您可以先创建框架然后再创建画布,以便画布具有更高的堆叠顺序。如您所见,您看不到框架,因为它位于画布后面。为了使其可见,您可以lift
:
frame.lift(canvas)
这样做会产生与首先创建画布相同的视觉效果。
此技术可用于隐藏和显示小部件。例如,您可以通过将多个框架堆叠在一起来创建类似笔记本的小部件,然后使用lift
将您想要显示的框架显示在订单的顶部。