2017-06-07 20 views
0

私はこれに対する答えを探していましたが、例は見つかりませんでした。ウィジェットを動的に作成した後でウィジェットを設定できますか?

複数のボタンやラベル、または同じ変数名を持つtkinterの任意のウィジェットを作成できるかどうかを知りたいのであれば、そのウィジェットを作成した後で直接ターゲティングすることができます。

ここに、同じ変数名を持つ5つのボタンを作成するコードの例を示します。ボタンを押すと、そのボタンにテキストが印刷されます。

import tkinter as tk 

btn_names = ["1st Button", "2nd Button", "3rd Button", "4th Button", "5th Button"] 

class MyButton(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 
     self.createButtons() 

    def createButtons(self): 

     row_count = 0 

     for n in range(5): 
      someButton = tk.Button(self.parent, text=btn_names[n], command= lambda t=btn_names[n]: self.getText(t)) 
      someButton.grid(row = row_count, column = 0) 
      row_count += 1 

    def getText(self, text): 
     print(text) 


if __name__ == "__main__": 
    root = tk.Tk() 
    myApp = MyButton(root) 


    root.mainloop() 

ここでわからないことは、上記のボタンにも変更を加えることができるかどうかです。ボタンの背景と前景色を変更したいのですが、編集したいボタンをターゲットにする方法がありません。

私はこれを行うことはできません。すべてのボタンがsomeButton

someButton.config(background = "black", foreground = "white")

を命名しているよう。

作成後にこのマナーで作成されたウィジェットを編集することは可能ですか?

答えて

1

これを実行する最も良い方法はわかりませんが、可能です。

ボタンを最初に作成したときにコマンドを渡す代わりに、ラムダ関数にコマンドを設定し、someButtonを引数として渡す行を追加します。コールバック関数で、渡されたボタンの背景色を変更するように設定してください。

import tkinter as tk 

btn_names = ["1st Button", "2nd Button", "3rd Button", "4th Button", "5th 
Button"] 

class MyButton(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 
     self.createButtons() 

    def createButtons(self): 

     row_count = 0 

     for n in range(5): 
      someButton = tk.Button(self.parent, text=btn_names[n]) 
      someButton.configure(command=lambda t=btn_names[n], btn = someButton: self.getText(t, btn)) 
      someButton.grid(row = row_count, column = 0) 
      row_count += 1 

    def getText(self, text, btn): 
     print(text) 
     btn.configure(background = 'black') 


if __name__ == "__main__": 
    root = tk.Tk() 
    myApp = MyButton(root) 


    root.mainloop() 
+0

ああ、これは非常に便利です。私はあなたがラムダにそれ以上の変数を加えることができるのか分からなかった。あなたの答えをありがとう私はこれが私のニーズのために働くと信じています。 –

関連する問題