簡體   English   中英

Tkinter Canvas 問題

[英]Tkinter Canvas Problems

我正在嘗試更改 Tkinter Canvas 小部件的分層。 對於大多數小部件,您可以使用lift方法強制小部件高於其他小部件。 但是,如果我在 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()

canvas lift()方法是tag_raise()的別名,它不是用來提升 canvas 本身,而是提升 canvas 中的實體。

我在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)則 canvas 小部件將正確升起。

我來這個問題是因為我實際上是想實現一個 tk 語句的等價物

canvas-pathName raise tagOrId ?aboveThis?

為了將單個 canvas 項目提升到特定的 z 位置。 對於那些對同一件事感興趣的人,我將發布我的認識(經過一點頭疼之后),這可以很容易地在 Python 中完成:

canvasObject.tag_raise(tagOrId, tagOrId2)

這里的第二個參數只是被合並到 tk 命令行中,然后被解釋為“aboveThis”值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM