2012-04-22 31 views
10

Tkinterのウィジェットの表示と非表示を教えてください。私はエントリーボックスを持っていますが、それはいつも示されていません。誰かが私にtkinterのエントリーウィジェットや他のウィジェットを表示したり非表示にする機能を表示できますか?私は複数のフレームを持たずにこれを行うことができるようにしたい。ウィジェットの表示と非表示

+3

私はあなたの質問に答えがあると思います - http://stackoverflow.com/questions/3819354/in-tkinter-is-there-any-way-to-make-a-widget-not-visable –

答えて

20

This has been answered before on stackoverflow。短い答えは、grid_removeを使用すると、以前にグリッドで追加されたウィジェットが削除されます。 grid_removeはウィジェットがどこにあったかを記憶しているので、単純なgrid()はすべてのオプションを再指定せずに戻します。

pack_forget(パックを使用している場合)とgrid_forget(グリッドを使用している場合)を使用することもできます。これらは、すべての設定を忘れてしまうことを除いて、grid_removeと同様に機能します。つまり、明示的に画面の適切な場所に戻す必要があります。

ウィジェットの積み重ね順を利用することもできます。 lowerメソッドを使用して親の背後にあるウィジェットを非表示にし、liftを使用して上に持ち上げることができます。例については、this answerを参照してください。

0

私は、他の人が投稿し、私が簡単な間違いをしていることに気づいたことを試しました。隠すつもりのウィジェットを宣言した同じ行に.grid()を呼び出すことはできません。

明確にするために、私は以前、この持っていた:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

をしかし、私はエラーAttributeError: 'NoneType' object has no attribute 'grid_remove'を得ました。それを修正するために、私はこのような、新しい行に.grid()への呼び出しをしなければならなかった:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion") 
self.helpExpansion.grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

次に表示と非表示を切り替えるには、私はちょうどself.helpExpansion.grid()(関数の引数は必要ありません)とself.helpExpansion.grid_remove()を呼び出す間で交互に。

私にとってはtk.Labelまたはttk.Labelの両方で動作しました。私はPython 2.7.13を使用しています。希望が助けてくれる!

+0

その理由は、Label参照をself.helpExpansionに代入するのではなく、実際には呼び出しの戻り値をgrid()に代入して、Noneを返すことです。 gridget()の呼び出しをウィジェットコンストラクタの呼び出しに追加するのは便利な省略形ですが、あとでそのウィジェットへの参照が必要ない場合(固定ラベルや、特殊なtk変数、またはコールバックを介して)。 – DrEsperanto

関連する問題