我正在尝试更改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()
答案 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"值。