Tkinter画布问题

时间:2011-06-05 05:22:45

标签: python canvas tkinter

我正在尝试更改Tkinter Canvas小部件的分层。对于大多数小部件,您可以使用提升方法强制小部件高于其他小部件。但是,如果我在Canvas小部件上尝试相同的操作,我会收到错误。

错误:

TypeError: tag_raise() got an unexpected keyword argument 'aboveThis'

我的问题的一个例子:

import Tkinter as Tk


root = Tk.Tk()

w, h = 200, 200

a = Tk.Canvas(root, bg='red', width=w, height=h)
a.grid(column=0, row=0)

b = Tk.Canvas(root, bg='blue', width=w, height=h)
b.grid(column=0, row=0)

a.lift(aboveThis=None)

root.mainloop()

如果我对Frame小部件做同样的事情,那就可以了。

示例:

import Tkinter as Tk


root = Tk.Tk()

w, h = 200, 200

a = Tk.Frame(root, bg='red', width=w, height=h)
a.grid(column=0, row=0)

b = Tk.Frame(root, bg='blue', width=w, height=h)
b.grid(column=0, row=0)

a.lift(aboveThis=None)

root.mainloop()

2 个答案:

答案 0 :(得分:3)

canvas lift()方法是tag_raise()的别名,用于引发画布本身而不是画布中的实体。

我在Tkinter.py源代码中找到了此评论:

# lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
# so the preferred name for them is tag_lower, tag_raise
# (similar to tag_bind, and similar to the Text widget);
# unfortunately can't delete the old ones yet (maybe in 1.6)

如果将a.lift(aboveThis=None)替换为Tk.Misc.lift(a, aboveThis=None),则会正确显示画布窗口小部件。

答案 1 :(得分:1)

我遇到了这个问题,因为我实际上想要实现等同于

的tk语句
canvas-pathName raise tagOrId ?aboveThis?

将单个画布项目提升到特定的z位置。对于那些对同样的事情感兴趣的人,我只是发布了我的认识(经过一些小小的讨论),这可以很容易地在Python中完成:

canvasObject.tag_raise(tagOrId, tagOrId2)

这里的第二个参数只是被合并到tk命令行中,然后被解释为" aboveThis"值。