2011-06-05 153 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」的值。