2016-10-02 97 views
-3

我正在做一些tkinter的实验,并且遇到了grid_remove的一些麻烦。我可以通过一个简单的按钮来使用它,该按钮链接到删除特定窗口小部件的命令,但当它是类的一部分时,我似乎无法使其工作。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) 
+0

“Text”中没有属性'grid_remove',读取错误。 – Li357

+0

@AndrewL。那么我将如何使用'grid_remove'来隐藏已经使用'Text'类创建的小部件? –

+0

@NickB:在你想移除的小部件上调用'grid_remove'。你还需要阅读这个问题的答案:http://stackoverflow.com/q/25092744/7432 –

回答

0

因此,对于其他人遇到此问题,这是我需要改变,以便让我的脚本工作。

首先,创建Label之后写.grid()是的grid的值赋给self.label,而不是分配Label它。 grid的值是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) 

所以我的脚本不能正常工作的原因是不是因为一个简单的错误,但所有这些的组合:固定的按钮看起来像后。我希望这将有助于未来的其他人!

相关问题