Tkinterでウィジェットをどのように表示および非表示にしますか?入力ボックスが欲しいのですが、常に表示されていません。エントリウィジェットやその他のウィジェットをtkinterで表示および非表示にする機能を誰かに見せてもらえますか?複数のフレームがなくてもできるようにしたいです。
これは以前にstackoverflowで回答されています 。簡単に言えば、 grid_remove を使用すると、ウィジェットが以前にグリッドを介して追加されていた場合にウィジェットが削除されます。 _grid_remove
_はウィジェットがどこにあったかを記憶しているので、単純なgrid()
はすべてのオプションを再指定する必要なくウィジェットを元に戻します。
pack_forget (packを使用する場合)および grid_forget (gridを使用する場合)も使用できます。これらはgrid_removeと同じように機能しますが、すべての設定が忘れられるため、画面上の適切な場所に明示的に戻す必要があります。
別のオプションは、ウィジェットのスタック順序を利用することです。 lower メソッドを使用してウィジェットを親の後ろに隠すことができ、 lift を使用してウィジェットを上に上げることができます。例については this answer を参照してください。
他の人が投稿した提案を試しましたが、私が単純な間違いを犯していることに気づきました。非表示にするウィジェットを宣言するのと同じ行で.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
_を使用しています。お役に立てれば幸いです。