前提・実現したいこと
PythonでGUIを用いて名前、年齢をリストに登録、削除、検索、ソートすることができるようにしたい。そのために現在csvに登録した名前、年齢を保存している。
発生している問題・エラーメッセージ
現在リストボックスの削除ボタンの内容が上手く動かず、リストの削除ができない。
該当のソースコード
Python
1import tkinter as tk 2import tkinter.messagebox as tkm 3import csv 4 5root = tk.Tk() 6root.title("title") 7root.geometry("960x480") 8 9 10#データ(リストボックスに表示させる) 11f = open('登録リスト.csv', 'r') 12data = f.read() 13list_value=tk.StringVar() 14list_value.set(data) 15f.close 16 17#リストボックスの作成 #selectmodeの種類extended:複数選択可能+ドラッグでも選択可能) 18listbox=tk.Listbox(root,listvariable=list_value,selectmode="extended") 19listbox.pack() 20listbox.place(x=650,y=50,width=200,height=300) 21 22#スクロールバーの作成 23scroll=tk.Scrollbar(listbox) 24 25#スクロールバーの配置を決める 26scroll.pack(side=tk.RIGHT,fill="y") 27 28#部品の動きをスクロールバーに反映させる 29scroll["command"]=listbox.yview 30 31 32# 名前ラベルの生成 33label = tk.Label(root, text='名前', 34 font=('', 20), 35 foreground='#000000') 36label.place(x=20, y=100, width=200, height=40) 37 38# 年齢ラベルの生成 39label = tk.Label(root, text='年齢', 40 font=('', 20), 41 foreground='#000000') 42label.place(x=20, y=200, width=200, height=40) 43 44 45# 名前のテキストフィールドの生成 46box1 = tk.Entry(root) 47box1.pack() 48box1.place(x=240, y=100, width=170, height=40) 49 50# 名前のテキストフィールドの生成 51box2 = tk.Entry(root) 52box2.pack() 53box2.place(x=240, y=200, width=170, height=40) 54 55# 検索のテキストフィールドの生成 56box3 = tk.Entry(root) 57box3.pack() 58box3.place(x=650, y=390, width=150, height=40) 59 60#登録ボタンのアクション 61def button_action1(self): 62 self.msg1 = box1.get() 63 self.msg2 = box2.get() 64 self.text ="" 65 66 if self.msg1 == "": 67 self.text += "名前を入れてください" 68 69 elif self.msg2 == "": 70 self.text += "年齢を入れてください" 71 72 elif self.msg2 == "": 73 self.text += "適切な年齢を入れてください" 74 75 else: 76 self.text = self.msg1+'さん'+self.msg2+'歳'.format(self.msg1,self.msg2) 77 f = open('登録リスト.csv','a') 78 f.write(self.msg1 + "," + self.msg2 + "\n") 79 box1.delete(0,tk.END) 80 box2.delete(0,tk.END) 81 listbox.insert(tk.END,self.msg1 + "," + self.msg2 + "\n") 82 83 tkm.showinfo('登録結果',self.text) 84 85#削除ボタンのアクション 86def button_action2(self): 87 selectedIndex = tk.ACTIVE 88 listbox.delete(selectedIndex) 89 90 91#名順ボタンのアクション 92def button_action3(self,event): 93 selectedIndex = tk.ACTIVE 94 listbox.delete(selectedIndex) 95 96 97#年順ボタンのアクション 98def button_action4(self,event): 99 selectedIndex = tk.ACTIVE 100 listbox.delete(selectedIndex) 101 102 103#検索ボタンのアクション 104def button_action5(self,event): 105 self.msg3 = box3.get() 106 self.msg3 in listbox 107 listbox.select_set(0,tk.END) 108 109 110# 登録ボタンの生成 111btn = tk.Button(root, text='登録') 112btn.bind("<Button-1>",button_action1) 113btn.place(x=200, y=300, width=50, height=40) 114 115#リストの削除ボタンの生成 116btn_delete=tk.Button(root,text="削除") 117btn_delete.bind("<Button-2>",button_action2) 118btn_delete.place(x=650, y=350, width=50, height=40) 119 120#リストの名順ソートボタンの生成 121btn_delete=tk.Button(root,text="名順") 122btn_delete.bind("<Button-3>",button_action3) 123btn_delete.place(x=700, y=350, width=50, height=40) 124 125#リストの年齢順ソートボタンの生成 126btn_delete=tk.Button(root,text="年順") 127btn_delete.bind("<Button-4>",button_action4) 128btn_delete.place(x=750, y=350, width=50, height=40) 129 130#リストの年齢順ソートボタンの生成 131btn_delete=tk.Button(root,text="検索") 132btn_delete.bind("<Button-5>",button_action5) 133btn_delete.place(x=800, y=390, width=50, height=40) 134 135 136root.mainloop()
試したこと
補足情報(FW/ツールのバージョンなど)
Python 3,8,3
あなたの回答
tips
プレビュー