2016-10-31 33 views
1

私はPythonでTkinterライブラリを使って簡単なGUIアプリケーションをプログラミングし始めました。 すべてうまく動作しますが、ウィジェット(例えば、「ログイン」から「ログアウト」などのボタン)を動的に変更するには、ウィジェットオブジェクトを含む変数を関数の外部から取得する必要があります。 私はこれを2通りの方法で行うことができます:Python 3とTkinter。多すぎるグローバル変数

  1. ウィジェットを引数として渡します。
  2. グローバル変数を使用しています。

簡単な例:

1)渡す引数として:

def changeLabel(b): 
    b.config(text='Logout') 

btn1 = Button(f0,text="Login",width=15) 
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10) 
changeLabel(btn1) 

2)またはグローバル変数使用:今

def changeLabel(): 
    global btn1 
    btn1.config(text='Logout') 

btn1 = Button(f0,text="Login",width=15) 
btn1.grid(row=1,column=2,rowspan=1,padx=10,ipadx=10) 
changeLabel(btn1) 

を、私はそのグローバル変数を知っていますを避けるべきですが、単純なものであっても、多くの関数を通してすべてのウィジェットを引数として渡しますアプリケーション、それは混乱です。

実行時にTkinterウィジェットを操作する最も良い方法は何ですか?あなたは私に正しい方法を提案できますか?

+1

は、あなただけですべての 'changeLabel'機能を持っていないことができます参照してください、と' btn1.configを行います'インライン?ちなみに、 'global'ステートメントは、' btn1'に何も割り当てていないので、アプローチ#2では必要ありません。 – Kevin

+1

3番目のオプションは、ウィジェットがクラスの属性であるクラスを使用することです。 –

+0

私の例を簡略化する自発的で、私のアプリケーションでは、私がする必要がある:私はと言うでしょう: - ボタンを隠し、別の1つの ショー - - 表示/非表示のフレーム - エトセトラ... – decadenza

答えて

4

実行時にtkinterウィジェットを操作する最善の方法は、これらのウィジェットをクラスの属性として保存することです。例えば

class Example(...): 
    def create_widgets(self): 
     ... 
     self.btn1 = Button(...) 
     ... 
    def changeLabel(self): 
     self.bt1.config(...) 

詳細については(テキスト= "ログアウト")をBest way to structure a tkinter application

関連する問題