我只是在调试我的程序时遇到了Tkinter的奇怪行为。如果在Canvas对象之前创建Frame对象,然后将其插入到该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中发现了一个bug
发布于 2013-06-15 21:58:28
这是一个特性。小部件的堆叠顺序默认为它们创建时的顺序。您可以使用lift和lower方法调整此堆叠顺序。
例如,可以先创建帧,然后创建画布,以便画布具有更高的堆叠顺序。正如您所观察到的,您看不到框架,因为它在画布后面。要使其可见,可以对其执行lift操作:
frame.lift(canvas)这样做将产生与您首先创建画布相同的视觉效果。
此技术对于隐藏和显示小部件非常有用。例如,您可以创建一个类似notebook的小部件,方法是将多个框架堆叠在一起,然后使用lift将希望可见的框架置于订单的顶部。
https://stackoverflow.com/questions/17124275
复制相似问题