【问题标题】:Python & tkinter: canvas.lift and canvas.lower on overlapping buttons does not workPython & tkinter:重叠按钮上的 canvas.lift 和 canvas.lower 不起作用
【发布时间】:2016-05-23 19:02:11
【问题描述】:

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

现在我想把 button1 放到前面(这个按钮你现在看不到,因为它在 button2 下)

self.canvas.lift(self.button1)

但由于某种原因,这不起作用。只是什么都没有发生。降低button2也没有效果。你能告诉我为什么吗?

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

【问题讨论】:

    标签: python tkinter tkinter-canvas


    【解决方案1】:

    您需要直接在小部件实例上调用,而不是在画布上调用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()

    【讨论】:

    • 顺便说一句:您不必同时使用button1.lift()button2.lower()。您可以使用button1.lift() button2.lower()
    • 谢谢,jkdc。那成功了。我在画布上标记了其他东西,并认为窗口的工作方式相同。
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多