わからないこと
Python3.#でTKINTERを使ってエクセルのファイルネームとシートネームを取得したいです。
しかし初回は取得できるのですが、再取得をGUI上からボタンで行うとシートネームを表示してくれません。
これはなぜでしょうか。
python
1import tkinter as tk 2import pandas as pd 3import tkinter as tk 4import tkinter.filedialog 5 6def sheet_select(sheets): 7 import tkinter as tk 8 frame2 = tk.Tk() 9 frame2.title('sheet選択') 10 # フレームの作成 11 12 # フレーム1(上側:リストボックスを格納する) 13 frame = tk.Frame(frame2) 14 frame.grid(row=0, sticky="we") 15 # フレーム2(下側:ボタンを格納する) 16 frame_button = tk.Frame(frame2) 17 frame_button.grid(row=1, sticky="we") 18 19 # データ(リストボックスに表示させる) 20 list_value = tk.StringVar() 21 list_value.set(sheets) 22 23 # リストボックスの作成 24 lb = tk.Listbox(frame, height=8, listvariable=list_value, selectmode="single") 25 lb.pack() 26 27 # テキストの作成 28 text_str = tk.StringVar() 29 text_str.set("ボタンを押して下さい") 30 text = tk.Label(frame_button, textvariable=text_str) 31 text.grid(row=0, columnspan=3) 32 # tk.messagebox.showinfo('CBD比較プログラム','Sheetsを選んでください') 33 selected = [] 34 35 def ok_button(): 36 for i in lb.curselection(): 37 selected.append(lb.get(i, i)[0]) 38 39 def close_window(): 40 frame2.destroy() 41 # frame2.quit() 42 43 44 button = tk.Button(frame_button, text="OK", command=lambda: [ok_button(), close_window()]) 45 button.grid(row=1, column=0, columnspan=2) 46 # 画面の表示 47 frame2.mainloop() 48 return selected[0] 49 50 51def file_select(): 52 # --------------------------------------------------------------------------------------------------------------------------- 53 # 基のファイル選択ダイアログの表示 54 root2 = tk.Tk() 55 56 fTyp = [("excel(.xlsm)", ".xlsm")] 57 iDir = 'C://pg' 58 file1 = tk.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir) 59 print(file1) 60 61 # シートを取得 62 root2.destroy() 63 bk = pd.ExcelFile(file1) 64 print(bk) 65 sheets = list(bk.sheet_names) 66 print(sheets) 67 selected = sheet_select(sheets) 68 return selected, file1 69 70 71 72sheet_name1, file1 = file_select() 73class Main(tk.Frame): 74 def __init__(self, master): 75 super().__init__(master) 76 77 button = tk.Button(self, text='re-do', command=lambda: re_set(self)) 78 button.pack() 79 frame = tk.LabelFrame(self, text='test', bg='#fff', fg='Blue', name='labelframe_test') 80 frame.pack(pady=10, anchor=tk.NW) 81 82 print(sheet_name1, file1) 83 84def re_set(owner): 85 sheet_name1, file1 = file_select() 86 print(sheet_name1, file1) 87 88def main(): 89 root = tk.Tk() 90 root.geometry("500x500") 91 win = Main(root) 92 win.pack(fill='both', expand='YES') 93 root.mainloop() 94 95 96if __name__ == '__main__': 97 main() 98
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。