2011-06-05 239 views
1

我在尝试改变Tkinter画布小部件的分层。对于大多数小部件,您可以使用电梯方法将小部件强制置于其他小部件之上。但是,如果我在Canvas小部件上尝试相同,则会出现错误。Tkinter画布问题

错误:

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() 

如果我做框架的窗口部件同样的事情,它的工作原理。

实施例:

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() 

回答

3

画布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) 

如果用Tk.Misc.lift(a, aboveThis=None)然后画布组件是否正确提出更换a.lift(aboveThis=None)

1

我来到了这个问题,因为我其实是想实现一个TK声明相当于像

canvas-pathName raise tagOrId ?aboveThis? 

,以提高个人的画布项目特定的z位置。对于那些有兴趣在同样的事情,我就后我实现(一个小脑袋划伤后),这可以在Python做很容易:

canvasObject.tag_raise(tagOrId, tagOrId2) 

第二个参数这里只是被纳入TK命令行,然后解释为“aboveThis”的值。