在 Tkinter 中隐藏按钮

Aly*_*ono 5 python user-interface tkinter button python-3.x

我想隐藏 tkinter 按钮,但不是在用户单击它时隐藏。我只是想在随机的时候隐藏它。我将如何在 Python 中做到这一点?下面是我尝试过的代码:

self.startGame = Button(self.canvas, text="Start", background='white', command = self.startGame, font=("Helvetica"))
self.startGame.place(x=770, y=400)
Run Code Online (Sandbox Code Playgroud)

隐藏它:

 self.startGame.bind('<Button-1>', self.hide_me)

 def hide_me(self, event):
    print('hide me')
    event.widget.pack_forget()
Run Code Online (Sandbox Code Playgroud)

它甚至没有进入hide_me函数内部。

Mik*_*SMT 5

正如评论中所指出的,您应该使用place_forget()使用在屏幕上设置的小部件place()

pack()和也是如此grid()。您将分别使用pack_forget()grid_forget()

这是您的代码的修改示例。

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        canvas = tk.Canvas(self)
        canvas.pack()
        self.startGame = tk.Button(canvas, text="Start", background='white', font=("Helvetica"))
        self.startGame.place(x=150, y=100)
        self.startGame.bind('<Button-1>', self.hide_me)

    def hide_me(self, event):
        print('hide me')
        event.widget.place_forget()

if __name__ == "__main__":
    Example().mainloop()
Run Code Online (Sandbox Code Playgroud)

也就是说,您不需要在这里绑定。只需在命令中使用 lambda 语句,如下所示:

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        canvas = tk.Canvas(self)
        canvas.pack()
        self.startGame = tk.Button(canvas, text="Start", background='white', font=("Helvetica"),
                                   command=lambda: self.hide_me(self.startGame))
        self.startGame.place(x=150, y=100)

    def hide_me(self, event):
        print('hide me')
        event.place_forget()

if __name__ == "__main__":
    Example().mainloop()
Run Code Online (Sandbox Code Playgroud)

  • @Eliyah,我相信对于所有几何管理器来说,如果您简单地在小部件上调用“place()”,它将被放回窗口之前的位置。`grid()` 和 `pack()` 相同。 (5认同)