実現したいこと
Python tkinterのtreeviewにおいて選択した行を抽出するbind関数を実行させたい
前提
Python tkinter でtreeviewを作成し、Treeview内に全データのDataFrameを表示させて、表示されているデータを選択したときにbind関数を実行させて選択されたデータを抽出する機能を実装しようとしているのですがbind関数内で引数が定義されていないらしくエラーが発生してしまいます。
発生している問題・エラーメッセージ
NameError: name 'tree' is not defined
該当のソースコード
Python3.6
1 2def select_record(event): 3 # 選択行の判別 4 record_id = tree.focus() 5 # 選択行のレコードを取得 6 record_values = tree.item(record_id, 'values') 7 print(record_values) 8 if tk.messagebox.showinfo(title="選択行の確認", 9 message="次の行が選択されました=> id:" 10 + record_values[0] 11 + ",USg:" + record_values[1] 12 + ",PS:" + record_values[2]): 13 tree.delete(record_id) 14 else: 15 pass 16def quit_me(root_window): 17 root_window.quit() 18 root_window.destroy() 19 20def data_choose(df, columns, data_length, cycletime): 21 df.insert(0, "id", np.arange(1, data_length+1, 1)) 22 columns.insert(0, "id") 23 root=tk.Tk() 24 root.geometry('500x600') 25 root.title('choose_data') 26 root.protocol('WM_DELETE_WINDOW', lambda :quit_me(root)) 27 frame=tk.Frame(root) 28 tree = ttk.Treeview(frame, columns=columns) 29 tree.bind("<<TreeviewSelect>>", select_record) 30 31 # 列の設定 32 tree.column('#0',width=0, stretch='no') 33 tree.column('id', anchor='center', width=80) 34 tree.column('USg',anchor='w', width=150) 35 tree.column('PS', anchor='center', width=100) 36 37 # 列の見出し設定 38 tree.heading('#0',text='') 39 tree.heading('id', text='id', anchor='center') 40 tree.heading('USg', text='USg', anchor='center') 41 tree.heading('PS',text='PS', anchor='center') 42 # レコードの追加 43 44 for i in range(len(df['USg'])): 45 tree.insert(parent='', index='end', values=(df['id'][i], "{:.6f}".format(df['USg'][i]), df['PS'][i])) 46 47 # スクロールバーの追加 48 scrollbar = ttk.Scrollbar(frame, orient=tk.VERTICAL, command=tree.yview) 49 tree.configure(yscroll=scrollbar.set) 50 51 label = tk.Label(frame, text='左クリックでデータを選択します') 52 label1 = tk.Label(frame, text='shift+左クリックで指定した範囲のデータを一括選択します') 53 label2 = tk.Label(frame, text='ctrl+任意のデータを複数選べます') 54 # ウィジェットの配置 55 56 frame.pack() 57 58 label.pack() 59 label1.pack() 60 label2.pack() 61 62 scrollbar.pack(side=tk.RIGHT, fill=tk.Y) 63 tree.pack(side=tk.TOP, fill=tk.BOTH, expand=1) 64 65 root.mainloop()
試したこと
29行目のselect_recordに引数を追加してみたり、partial関数を試したりしましたが
どれもうまくいきませんでした。
2行目のselect_record(event)をselect_record(event, tree)にしましたが、引数がうまく対応せずこちらもうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。