web-dev-qa-db-ja.com

ウィジェットの表示と非表示

Tkinterでウィジェットをどのように表示および非表示にしますか?入力ボックスが欲しいのですが、常に表示されていません。エントリウィジェットやその他のウィジェットをtkinterで表示および非表示にする機能を誰かに見せてもらえますか?複数のフレームがなくてもできるようにしたいです。

20
udpatil

これは以前にstackoverflowで回答されています 。簡単に言えば、 grid_remove を使用すると、ウィジェットが以前にグリッドを介して追加されていた場合にウィジェットが削除されます。 _grid_remove_はウィジェットがどこにあったかを記憶しているので、単純なgrid()はすべてのオプションを再指定する必要なくウィジェットを元に戻します。

pack_forget (packを使用する場合)および grid_forget (gridを使用する場合)も使用できます。これらはgrid_removeと同じように機能しますが、すべての設定が忘れられるため、画面上の適切な場所に明示的に戻す必要があります。

別のオプションは、ウィジェットのスタック順序を利用することです。 lower メソッドを使用してウィジェットを親の後ろに隠すことができ、 lift を使用してウィジェットを上に上げることができます。例については this answer を参照してください。

24
Bryan Oakley

他の人が投稿した提案を試しましたが、私が単純な間違いを犯していることに気づきました。非表示にするウィジェットを宣言するのと同じ行で.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_を使用しています。お役に立てれば幸いです。

3
Olivia Stork