発生中の問題
ttk.Comboboxを使用し、boxインスタンスに無名関数をbindさせ、選択変更があった場合にコンソールに表示する。とったコードになります。
同種のboxを使用するため、for文の中でインスタンスを生成し貼り付るといった実装方法にしました。
発生している問題点として、どこのコンボボックスでイベントが発生(選択の変更)しても最後に生成されたコンボボックスの値情報を取ってきてしまいます。
現在のコード
Python
1#coding:utf-8 2 3import tkinter as tk 4from tkinter import ttk 5 6root = tk.Tk() 7 8x = 0.1 9y = 0.2 10 11for i in range(2): 12 box = ttk.Combobox(root, values=["A","B"]) 13 box.place(relx=0.1, rely=y-0.1) 14 box.current(0) 15 box.bind("<<ComboboxSelected>>", lambda e: print(box.get())) 16 # 最後に作成されたインスタンス(2つ目のbox)のbox.get()をすべてのインスタンスが所持している。 17 18 x += 0.1 19 y += 0.1 20 21root.mainloop()
試したこと
同じfor文の中で、同じインスタンス名で回しているのが原因かとおもい、
ttk.Combobox(self, state="A","B"])
をforの前で違うそれぞれ違うインスタンス変数名で定義しbindしてみました。
しかし、問題解決にはいたらず、みだし現在のコードと動作は同様です。
Python
1import tkinter as tk 2from tkinter import ttk 3 4root = tk.Tk() 5 6x = 0.1 7y = 0.2 8 9box = ttk.Combobox(root, values=["A","B"]) 10box2 = ttk.Combobox(root, values=["A","B"]) 11 12box_array = [box, box2] 13for i in box_array: 14 i.place(relx=0.1, rely=y-0.1) 15 i.current(0) 16 i.bind("<<ComboboxSelected>>", lambda e: print(i.get())) 17 18 x += 0.1 19 y += 0.1 20 21root.mainloop() 22
動作環境
windows10
Python 3.8.3
WSL2 ubuntu
お聞きしたいこと
試したことにあります、同じfor文の中で、同じインスタンス名で回しているのが原因かとおもった。が原因ではないためお手上げ状態です。
原因を教えていただけるとありがたいです。
余談にはなりますが、
同種のウィジェットを生成したいからと、for文の中でインスタンスを生成し貼り付ける。といった実装方法は綺麗な実装方法と言えるのでしょうか。
forで回すのではなく、メソッドを作成するや、それぞれ単体で作ったほうがいいなどありましたらご指摘願います。
回答1件
あなたの回答
tips
プレビュー