前提・実現したいこと
クラスの継承機能については余り理解できておりませんが、カメラのEV値計算簡単アプリを作成中です。
listboxを二つ作りました。 listbox間を行き来したいのですが、listbox1で数値確定後、listbox2(或いはその逆)に移ると、動作は見たところ正しいのですがエラー表示が出ます。
宜しく対応策教えて下さい。
発生している問題・エラーメッセージ
Python
1 2 3listboxを二つ作りました。 listbox間を行き来したいのですが、listbox1で数値確定後、listbox2(或いはその逆)に移ると、動作は見たところ正しいのですがエラー表示が出ます。 4 5下記のエラーが表示されます 6 7 8Exception in Tkinter callback 9Traceback (most recent call last): 10 File "C:\Users\tak11\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__ 11 return self.func(*args) 12 File "C:\Users\tak11\デスクトップ\ISO_F_T-リストボックス検討1.py", line 47, in show_item 13 self.label_2["text"] = self.listbox_2.get(item_index_2) 14 File "C:\Users\tak11\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 2798, in get 15 return self.tk.call(self._w, 'get', first) 16_tkinter.TclError: bad listbox index "": must be active, anchor, end, @x,y, or a number 17 18### 該当のソースコード 19 20''' 21import tkinter as tk 22 23class TestListbox_1(tk.LabelFrame): 24 def __init__(self, master=None): 25 super().__init__(master, text="ISO") 26 #Listbox 27 self.listbox_1 = tk.Listbox(self, width=8, selectmode="extended") 28 self.listbox_1.bind("<<ListboxSelect>>", self.show_item) 29 li = ["50", "100", "200", "400", "800", "1600", "3200", "6400", "12800", "25600"] 30 for item in li: 31 self.listbox_1.insert(tk.END, item) 32 self.listbox_1.pack() 33 34 #表示用ラベル 35 self.label_1 = tk.Label(self, text="ISO", bg="lightblue") 36 self.label_1.pack() 37 38 def show_item(self, event): 39 #リストクリック時に実行するメソッド 40 item_index_1 = self.listbox_1.curselection() 41 self.label_1["text"] = self.listbox_1.get(item_index_1) 42 43 44class TestListbox_2(tk.LabelFrame): 45 def __init__(self, master=None): 46 super().__init__(master, text="絞り") 47 #Listbox 48 self.listbox_2 = tk.Listbox(self, width=8, selectmode="extended") 49 self.listbox_2.bind("<<ListboxSelect>>", self.show_item) 50 li = ["1.4", "2", "2.8", "4", "5.6", "8", "11", "16", "22", "32"] 51 for item in li: 52 self.listbox_2.insert(tk.END, item) 53 self.listbox_2.pack() 54 55 #表示用ラベル 56 self.label_2 = tk.Label(self, text="絞り", bg="lightgreen") 57 self.label_2.pack() 58 59 def show_item(self, event): 60 #リストクリック時に実行するメソッド 61 item_index_2 = self.listbox_2.curselection() 62 self.label_2["text"] = self.listbox_2.get(item_index_2) 63 64if __name__ == "__main__": 65 root = tk.Tk() 66 root.title("kumasanのEV計算機") 67 root.geometry("300x400") 68 69 70 iso = TestListbox_1(master=root) 71 iso.place(x=20, y=20) 72 73 aperture = TestListbox_2(master=root) 74 aperture.place(x=120, y=20) 75 76 77root.mainloop() 78''' 79 80### 試したこと 81 82クラス継承をしないcodeを書きましたが、そこではlistbox間の移動が出来ませんでした。 83 84### 補足情報(FW/ツールのバージョンなど) 85 86Window10 64bit 87Python ver3.7.3
インデントがなくなって読めなく(実行できなく)なっています。
ソースコードはコードブロック```で囲んでください。
'''
import tkinter as tk
class TestListbox_1(tk.LabelFrame):
def __init__(self, master=None):
super().__init__(master, text="ISO")
#Listbox
self.listbox_1 = tk.Listbox(self, width=8, selectmode="extended")
self.listbox_1.bind("<<ListboxSelect>>", self.show_item)
li = ["50", "100", "200", "400", "800", "1600", "3200", "6400", "12800", "25600"]
for item in li:
self.listbox_1.insert(tk.END, item)
self.listbox_1.pack()
#表示用ラベル
self.label_1 = tk.Label(self, text="ISO", bg="lightblue")
self.label_1.pack()
def show_item(self, event):
#リストクリック時に実行するメソッド
item_index_1 = self.listbox_1.curselection()
self.label_1["text"] = self.listbox_1.get(item_index_1)
class TestListbox_2(tk.LabelFrame):
def __init__(self, master=None):
super().__init__(master, text="絞り")
#Listbox
self.listbox_2 = tk.Listbox(self, width=8, selectmode="extended")
self.listbox_2.bind("<<ListboxSelect>>", self.show_item)
li = ["1.4", "2", "2.8", "4", "5.6", "8", "11", "16", "22", "32"]
for item in li:
self.listbox_2.insert(tk.END, item)
self.listbox_2.pack()
#表示用ラベル
self.label_2 = tk.Label(self, text="絞り", bg="lightgreen")
self.label_2.pack()
def show_item(self, event):
#リストクリック時に実行するメソッド
item_index_2 = self.listbox_2.curselection()
self.label_2["text"] = self.listbox_2.get(item_index_2)
if __name__ == "__main__":
root = tk.Tk()
root.title("kumasanのEV計算機")
root.geometry("300x400")
iso = TestListbox_1(master=root)
iso.place(x=20, y=20)
aperture = TestListbox_2(master=root)
aperture.place(x=120, y=20)
root.mainloop()
################### ネットより借用 7/12/2019 ##################################
"""
#リストボックスで選択した値をラベルに表示させる
#複数リストボックス検討1.py
import tkinter
class TestListbox(tkinter.LabelFrame):
def __init__(self, master=None):
super().__init__(master, text="Listbox")
#Listbox
self.listbox = tkinter.Listbox(self, selectmode="extended") #1
self.listbox.bind("<<ListboxSelect>>", self.show_item) #2
li = ["aaa", "bbb", "ccc", "ddd", "eee"] #3
for item in li:
self.listbox.insert(tkinter.END, item) #4
self.listbox.pack()
#表示用ラベル
self.label = tkinter.Label(self, text="show_item", bg="lightblue")
self.label.pack()
def show_item(self, event):
#リストクリック時に実行するメソッド
item_index = self.listbox.curselection() #5
self.label["text"] = self.listbox.get(item_index) #6
if __name__ == "__main__":
root = tkinter.Tk()
f = TestListbox(master=root)
f.pack()
root.mainloop()
'''
回答1件
あなたの回答
tips
プレビュー