from tkinter import*
root = Tk()
shape = Canvas(root)
class GUI():
def __init__(self):
pass
def create_button(self, info, boom, posit):
self.Button(root)
self.config(text=info)
self.bind("<Button-1>",boom)
self.grid(column=posit[0],row=posit[1])
def create_label(self, info, posit):
self.Label(root)
self.config(text=info)
self.grid(column=posit[0],row=posit[1])
def go_away(self):
print("GO AWAY before")
self.button.grid_forget()
print("GO AWAY")
def make_GUI():
root.title("Hexahexaflexagon")
hexahexa = GUI()
quit_butt = GUI()
quit_butt.create_button("Exit","root.destroy()",[0,1])
quit_butt.go_away()
make_GUI()
root.mainloop()
好吧,我正在尝试编写一个类函数来隐藏(如果不是,则删除)由 tkinter 创建的按钮,我是类的新手,我不断收到的错误消息是 GUI 类不有该功能或该对象没有该属性,我尝试过诸如 frm.forget()
、.lower()
、.grid_forget( )
但对我来说不起作用。
回溯是:
Traceback (most recent call last):
File "N:\HW\Hexahexaflexagon generator.py", line 94, in <module>
make_GUI()
File "N:\HW\Hexahexaflexagon generator.py", line 63, in make_GUI
quit_butt.go_away()
File "N:\HW\Hexahexaflexagon generator.py", line 51, in go_away
self.button.grid_forget()
AttributeError: 'function' object has no attribute 'grid_forget'
最佳答案
问题出在这一行:
self = Button(root)
您正在重新定义 self
,从引用当前对象,现在引用不同的对象。标签下面还有同样的问题。这根本不是Python 的工作原理。
您必须将小部件存储为 self
上的属性,而不是存储为 self
本身。
self.button = Button(root)
...
self.label = Label(root)
完成此操作后,您可以使用 grid_forget
隐藏按钮或标签,因为您使用 grid
使其可见:
self.button.grid_forget()
您还有另一个问题,因为您将命令作为字符串传递。这不会像你想象的那样工作。如果您希望能够传入一个函数,它需要是对实际函数的引用:
quit_butt.button("Exit",root.destroy,[0,1])
关于python - 如何使用Python中的类函数隐藏按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33670505/