Tkinter - 作为类的一部分内置'grid_remove'的小部件

时间:2016-10-02 02:57:48

标签: python python-3.x tkinter

我正在使用tkinter进行一些实验,并且遇到了grid_remove的一些麻烦。我可以使用一个简单的按钮来链接到删除特定小部件的命令,但是当它是类的一部分时,我似乎无法使它工作。

当我尝试运行时:

class Text(object):

def __init__(self, label_text, r, c):
    self.label_text = label_text
    self.r = r
    self.c = c
    self.label = Label(root, text = self.label_text).grid(row = self.r, column = self.c)

def hide(self):
    self.grid_remove()
def show(self):
    self.grid()

我收到错误:

AttributeError: 'Text' object has no attribute 'grid_remove'

我还希望有一个按钮来控制小部件的可见性,那么我该如何为按钮指定命令呢?目前我有:

button = Button(root, text = 'Hide', command = one.hide()).grid(row = 2)

1 个答案:

答案 0 :(得分:0)

因此,对于遇到此问题的其他人来说,这是我需要更改以使脚本运行的原因。

首先,在创建.grid()后立即编写Label,将grid的值分配给self.label,而不是为其分配Labelgrid的值是none,因此创建了第一个错误。修复代码的那部分后,它看起来像:

self.label = Label(root, text = self.label_text)
self.label.grid(row = self.r, column = self.c)

下一个问题是定义hideshow函数。我试图grid_remove整个Text课程。但是,Text类包含许多不同的内容,其中一个是Label。我需要指定仅将grid_remove应用于Label而不是整个类。修正定义后,它们看起来像这样:

def hide(self):
    self.label.grid_remove()

def show(self):
    self.label.grid()

最后一个错误是按钮中的命令。我写过command = one.hide()。但是,由于某些我不知道的原因,我只能在没有括号的情况下只编写command = one.hide。修复按钮后的样子:

button = Button(root, text = 'Hide', command = one.hide).grid(row = 2)

因此我的脚本无法正常工作的原因不是由于一个简单的错误,而是所有这些的组合。我希望这将有助于将来的其他人!