Q&A
実現したいこと・発生している問題
pythonのtkinterでguiアプリを作っています。過去のデータをshelveに保存して、ラジオボタンで選択して読み込もうとしているのですが、2番目の値を選択したのに1番目の値が出力されてしまいます。
該当のソースコード
python
1import shelve 2import tkinter as tk 3 4path="C:\\Users\\XXXXX\\Documents\\python\\" 5 6def history(): 7 item = [] 8 with shelve.open(path+'history') as db: 9 for key in db.keys(): 10 item.append(f"{key}") 11 root3=tk.Tk() 12 root3.title("履歴の復元") 13 val = tk.IntVar() 14 val.set(0) 15 rb_list=[] 16 for i in range(len(item)): 17 rb=tk.Radiobutton(root3,value = i,variable =val,text = item[i],font=("",15)) 18 rb_list.append(rb) 19 rb_list[i].pack(anchor=tk.W) 20 def choice(): 21 ch = val.get() 22 print(item[ch]) 23 button = tk.Button(root3,text = '読み込む',command = choice,font=("",15)).pack() 24 root3.mainloop() 25 26root=tk.Tk() 27button_=tk.Button(root,text="履歴",command=history) 28button_.pack() 29root.mainloop()
試したこと
以下のコードだと上手くいきました。
python
1import shelve 2import tkinter as tk 3 4path="C:\\Users\\XXXXX\\Documents\\python\\" 5 6def history(): 7 item = [] 8 with shelve.open(path+'history') as db: 9 for key in db.keys(): 10 item.append(f"{key}") 11 root3=tk.Tk() 12 root3.title("履歴の復元") 13 val = tk.IntVar() 14 val.set(0) 15 rb_list=[] 16 for i in range(len(item)): 17 rb=tk.Radiobutton(root3,value = i,variable =val,text = item[i],font=("",15)) 18 rb_list.append(rb) 19 rb_list[i].pack(anchor=tk.W) 20 def choice(): 21 ch = val.get() 22 print(item[ch]) 23 button = tk.Button(root3,text = '読み込む',command = choice,font=("",15)).pack() 24 root3.mainloop() 25history()
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/30 02:54
2023/03/30 07:12 編集