首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tkinter Canvas必须在其内容之前进行初始化。这是一个特性还是一个bug?

Tkinter Canvas必须在其内容之前进行初始化。这是一个特性还是一个bug?
EN

Stack Overflow用户
提问于 2013-06-15 21:41:23
回答 1查看 423关注 0票数 0

我只是在调试我的程序时遇到了Tkinter的奇怪行为。如果在Canvas对象之前创建Frame对象,然后将其插入到该Canvas中,则无法显示该对象。但是,如果颠倒了创建顺序(首先是Canvas,然后是Frame),则Frame中的内容将正确显示。

例如,下面的代码运行良好:

代码语言:javascript
运行
复制
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()

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

代码语言:javascript
运行
复制
frame = Frame(app)
canvas = Canvas(app)

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

这是故意设计的行为(如果是,为什么?),或者我只是在Tkinter中发现了一个bug

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 21:58:28

这是一个特性。小部件的堆叠顺序默认为它们创建时的顺序。您可以使用liftlower方法调整此堆叠顺序。

例如,可以先创建帧,然后创建画布,以便画布具有更高的堆叠顺序。正如您所观察到的,您看不到框架,因为它在画布后面。要使其可见,可以对其执行lift操作:

代码语言:javascript
运行
复制
frame.lift(canvas)

这样做将产生与您首先创建画布相同的视觉效果。

此技术对于隐藏和显示小部件非常有用。例如,您可以创建一个类似notebook的小部件,方法是将多个框架堆叠在一起,然后使用lift将希望可见的框架置于订单的顶部。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17124275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档