2016-10-02 5 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

ので、この問題に遭遇してきた他の人のために、ここで私は私のスクリプトは、仕事を得るために変更するために必要なものです。

まず、Labelself.labelgridの値を割り当てる代わりに、それにLabelを割り当てた後に作成.grid()権利を書きます。 gridの値はnoneの値なので、最初のエラーが発生しています。次の問題は、hideshow関数を定義して

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

:ようなコードの一部を固定した後、それが見えます。私はgrid_remove全体をTextクラスにしようとしていました。しかしながら、Textクラスは多くの異なるものから成っており、そのうちの1つはLabelです。クラス全体ではなく、Labelにのみgrid_removeを適用するように指定する必要がありました。定義を修正すると、次のようになります。

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) 

だから私のスクリプトが働いていなかった理由は1つの単純なエラーが、これらの全ての組み合わせによるものではなかった:ボタンがどのように見えることを固定した後。私はこれが将来他の誰かを助けることを願っています!

関連する問題