Python&;tkinter:重叠按钮上的canvas.lift和canvas.lower无效

Python&;tkinter:重叠按钮上的canvas.lift和canvas.lower无效,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我使用tkinter和python 3.4在画布上创建了两个重叠按钮: 现在我想把按钮1带到前面(你现在看不到的按钮,因为它在按钮2下面) 但由于某些原因,这不起作用。只是什么都没发生。同样,降低按钮2也没有效果。你能告诉我为什么吗 import tkinter as tk class Example(tk.Frame): def __init__(self, root): tk.Frame.__init__(self, root) self.canv

我使用tkinter和python 3.4在画布上创建了两个重叠按钮:

现在我想把按钮1带到前面(你现在看不到的按钮,因为它在按钮2下面)

但由于某些原因,这不起作用。只是什么都没发生。同样,降低按钮2也没有效果。你能告诉我为什么吗

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, root):
        tk.Frame.__init__(self, root)
        self.canvas = tk.Canvas(self, width=400, height=400, background="bisque")
        self.canvas.create_text(50,10, anchor="nw", text="Click to lift button1")
        self.canvas.grid(row=0, column=0, sticky="nsew")
        self.canvas.bind("<ButtonPress-1>", self.click_on_canvas)

        self.button1 = tk.Button(self.canvas, text="button1")        
        self.button2 = tk.Button(self.canvas, text="button2")

        x = 40
        self.canvas.create_window(x, x, window=self.button1)
        self.canvas.create_window(x+5, x+5, window=self.button2)



    def click_on_canvas(self, event):

        print("lifting", self.button1)
        self.canvas.lift(self.button1)
        self.canvas.lower(self.button2)


if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
将tkinter作为tk导入
类示例(tk.Frame):
定义初始化(自,根):
tk.Frame.\uuuu init\uuuu(self,root)
self.canvas=tk.canvas(self,宽度=400,高度=400,background=“bisque”)
self.canvas.create_text(50,10,anchor=“nw”,text=“单击提升按钮1”)
self.canvas.grid(行=0,列=0,sticky=“nsew”)
self.canvas.bind(“,self.click\u on\u canvas)
self.button1=tk.Button(self.canvas,text=“button1”)
self.button2=tk.Button(self.canvas,text=“button2”)
x=40
self.canvas.create_窗口(x,x,window=self.button1)
self.canvas.create_窗口(x+5,x+5,window=self.button2)
def在画布上单击(自身、事件):
打印(“提升”,自动按钮1)
自我画布提升(自我按钮1)
自我画布降低(自我按钮2)
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
示例(root).pack(fill=“both”,expand=True)
root.mainloop()

您需要直接在小部件实例上调用它,而不是在画布上调用
lift()

def click_on_canvas(self, event):
    print("lifting", self.button1)
    self.button1.lift()
    self.button2.lower()   # Not necessary to both lift and lower
这仅适用于通过画布上的窗口显示的小部件


如果要绘制直线或矩形等对象,您可以像以前一样在画布实例上使用
lift()
tag_raise()

btw:您不必同时使用
button1.lift()
button2.lower()
。您可以使用
按钮1.lift()
按钮2.lower()
。谢谢,jkdc。这就成功了。我在画布上标记其他东西,认为windows也是这样工作的。
def click_on_canvas(self, event):
    print("lifting", self.button1)
    self.button1.lift()
    self.button2.lower()   # Not necessary to both lift and lower