前提・実現したいこと
python初心者です。
現在tkinterを使用してフォームに入力されたものをエクセルの指定したセルに反映させるコードを作成しています。
調べて出てきたコードを元に自分の使いたいようにコードを編集して作成しました。
発生している問題・エラーメッセージ
指定のradiobuttonにチェックが入った時にそのvalueの値がvariableの変数に格納されません。
特にエラーコードは出力しないのですが、printの値や反映されたエクセルを確認してもradiobuttonの箇所のみ
初期値のまま「0」です。
どなたかご教授していただけると助かります。お願い致します。
該当のソースコード
wba = openpyxl.load_workbook(r'ファイル') wsa = wba.worksheets[0] ai = [] nyuryoku = [] class Application(tk.Frame): # Application(tk.Frame)をGUIとする def __init__(self, master=None): super().__init__(master) # ウィンドウの設定 self.master.title("タイトル") # 実行内容 self.pack() # 自動サイズで配置 self.create_widget1() #def create_widget1(self):を実行 # create_widget1メソッドを定義 def create_widget1(self): # label1ウィジェット self.label1 = tk.Label(self,text="説明", padx = 50,font=("メイリオ", "18", "bold")) self.label1.pack(padx=5, pady=5) #x軸、y軸に5の余白を作りながら上記のLabelを配置 self.labelframe = tk.LabelFrame(self,text="接続状態",font=("メイリオ", "14")) f0 = self.labelframe v1 = tk.StringVar() v1.set("0") v2 = v1.get() self.radio = tk.Radiobutton(f0,value="切断中",variable=v1,text="切断中",font=("メイリオ", "14")) self.radio2 = tk.Radiobutton(f0,value="接続中",variable=v1,text="接続中",font=("メイリオ", "14")) self.labelframe.pack(side=tk.BOTTOM, padx=5, pady=5) self.check.grid(column=0,row=0,padx=5, pady=5) #ボタンの配置場所 self.radio2.grid(column=1,row=0,padx=5, pady=5) #ボタンの配置場所 # 各項目のlabelとentry items = ["発生日","発生時間","最小値", "最大値", "接続時間"] # itemsリストを定義 # button1が押された時に実行されるfetchメソッドを定義 def fetch(entries): # entriesリストの要素は(項目名, entryウィジェット)のタプルとなっている for entry in entries: # ループ開始 item = entry[0] # 項目名を取得 text = entry[1].get() # entryウィジェットの入力値を取得 ai.append(text) print('{}:{}'.format(item,text)) # 値をフォーマットして出力 hyouzi = '{}:{}'.format(item,text) nyuryoku.append(hyouzi) nyuryoku.append(v2) for i, name in enumerate(nyuryoku): wsa.cell(row=5+i, column=2).value = name wba.save(r'ファイル') print(ai) print(nyuryoku) # 各項目のlabelとentry def makeform(self, items): # 処理を呼び出せるようmakeform関数としてまとめる entries = [] # entriesリストを定義 for item in items: # ループ開始 row = tk.Frame(self) # 各項目のlabelとentryを囲むrowフレームを生成 label = tk.Label(row,text=item,font=("メイリオ", "16")) # 各項目のlabelを生成 entry = tk.Entry(row,font=("メイリオ", "16")) # 各項目のentryを生成 row.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5) # rowフレームを配置 label.pack(side=tk.LEFT) # labelウィジェットを配置 entry.pack(side=tk.RIGHT, fill=tk.X) # entryウィジェットを配置 entries.append((item, entry)) # 項目名と生成したentryウィジェットのタプルを1つの要素としてentriesリストに追加 return entries # entriesリストを返り値として返す ents = makeform(self, items) # ents変数を定義してmakeform関数を代入 self.button1 = tk.Button(self, text="確認",command=(lambda e=ents: fetch(e))) # ボタンが押されるとmakeform関数を実行してその返り値を使ってfetch関数を実行 self.button2 = tk.Button(self, text="終了", command=root.quit) self.button1.pack(side=tk.LEFT, padx=5, pady=5) #ボタンの配置場所 self.button2.pack(side=tk.LEFT, padx=5, pady=5) #ボタンの配置場所 if __name__ == "__main__": root = tk.Tk() app = Application(master=root) app.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/11 08:58