2016-08-15 9 views
0

変数(このケースではb)をボタンに割り当ててpack()で画面に配置した後、別のデータ型にbを再割り当てすると、そのボタンにアクセスして削除または参照できるようになりますに?私はその質問がどんなデータ型やオブジェクトについても質問されるかもしれないと思うが、これはボタンが画面上に残されているので際立っている。例:オブジェクトをPythonの変数に再割り当てするにはどうすればいいですか?

import tkinter as tk 

root=tk.Tk() 
root.geometry('300x300') 

b=tk.Button(root, text="button b") 
b.pack() 
b=1 

root.mainloop() 

答えて

1

...その後、それが削除されたか、そうでない場合に参照できるように、私はそのボタンへのアクセス方法、別のデータ型にBを再割り当て?

短い回答:できません。参照するには、参照を保持する必要があります。つまり、tkinterにはいくつかの選択肢があります。

あなたはコールバックのボタンを参照したい場合は、あなたはそれを渡すことができますこれは、ボタンを作成し、別のステップでコールバックを定義する必要があります。

b = tk.Button(...) 
b.configure(command=lambda button=b: do_something) 
... 
def do_something(button): 
    print("the widget is:", button) 

また、あなたの場合バインディングを使用している場合、バインドされた関数が呼び出されると、そのウィジェットへの参照を含む属性を持つイベントオブジェクトが渡されます。

b.bind("<1>", do_something) 
... 
def do_something(event): 
    print("the widget is:", event.widget) 

最後に、あなたは子ウィジェット(例:root.winfo_children)のリストについては、Tkinterのを頼むことができ、そしてあなたがpackplaceまたはgridを使用していたかどうかを知っていれば、あなたはすべてを照会するslavesメソッドを使用することができます特定のコンテナ(例:root.grid_slaves()root.pack_slaves()root.place_slaves())内部で管理されているウィジェット

1

別の割り当てを使用して参照を保存します。

b = tk.Button(root, text="button b") 
saved = b 
b = 1 
saved.pack() 
1

あなたが方法でルートウィンドウのすべてのウィジェットにアクセスすることができます

list_of_widgets = root.pack_slaves() 

を入力し、オブジェクトの種類を確認します。 (これは良い習慣ではありません...) したがって、アプリケーションからtkinterへのインターフェイスを明確に分離するために、必要な参照を個別のオブジェクトに保存することをお勧めします。それ以降は、インターフェイスオブジェクトを介してウィジェットにアクセスする必要があります。これにより、よりクリーンなコードが作成されます。

関連する問題