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