2016-10-02 96 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) 

所以我的腳本不能正常工作的原因是不是因爲一個簡單的錯誤,但所有這些的組合:固定的按鈕看起來像後。我希望這將有助於未來的其他人!

相關問題