質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

715閲覧

Python tkinter クリック時の書き込み

Ze6o3

総合スコア1

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/09/12 05:19

前提

Pythonにて日報入力ツールを作成しています。
各項目をテキストボックスに入力し、テキストファイル出力ボタンをクリックすることで、テキストファイル形式で保存されるようにしたいです。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
この構文だとテキストボックス1のしか書き込まれずに保存されてしまいます。
全部のテキストボックスの値をテキストファイルに出力したいです。

発生している問題・エラーメッセージ

エラーは出ません。

該当のソースコード

import tkinter as tk def main_export(): #main_viewという窓を作成する。 main_view = tk.Tk() main_view.title("日報作成ツール") #windowの表示名 main_view.geometry("800x600") #大きさを指定 #ラベル lbl = tk.Label(text='社員番号') lbl.place(x=10, y=10) value_in_box = tk.StringVar() txt1 = tk.Entry(master=main_view, textvariable=value_in_box, width=12) txt1.place(x=70, y=10) #名前ラベルとテキストボックスの表示 lbl2 = tk.Label(text='名前') lbl2.place(x=210, y=10) value_in_box = tk.StringVar() txt2 = tk.Entry(master=main_view, textvariable=value_in_box, width=12) txt2.place(x=250, y=10) #日付ラベルとテキストボックスの表示 lbl3 = tk.Label(text='日付') lbl3.place(x=410, y=10) value_in_box = tk.StringVar() txt3 = tk.Entry(master=main_view, textvariable=value_in_box, width=12) txt3.place(x=450, y=10) #目標ラベルとテキストボックスの表示 lbl4 = tk.Label(text='目標') lbl4.place(x=10, y=50) value_in_box = tk.StringVar() txt4 = tk.Entry(master=main_view, textvariable=value_in_box, width=50) txt4.place(x=75, y=50) #やるべきことラベルとテキストボックスの表示 lbl5 = tk.Label(text='その為にやるべきこと') lbl5.place(x=350, y=50) value_in_box = tk.StringVar() txt5 = tk.Entry(master=main_view, textvariable=value_in_box, width=50) txt5.place(x=450, y=50) #書き出しボタンの配置 button = tk.Button(master=main_view, text="テキストファイル出力", command=lambda: write_file(txt1)) button.place(x=100, y=150) #main_viewを表示する無限ループ main_view.mainloop() return 0 def write_file(txt): input_txt = txt.get() #テキストバックス内の内容を取得 #ファイルへの書き込み with open("テスト.txt", mode='a') as f: #ファイルを書き込みモードで開く。 f.write(input_txt) #書き出す。 print("出力完了!!!") #書き出しが完了したことをターミナルで表示する。 return 0 if __name__ == "__main__": main_export()

試したこと

繰り返し分を考えましたが、クリック部分にtxt1とすると書き出しボタンの大量発生してしまう。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえずの策としては

  • ボタンハンドラではテキストボックスのリストを渡す
  • ハンドラ側ではリストからテキストを抽出して行文字列を作成する

とよいかと思います。

Python

1 txts = [txt1, txt2, txt3, txt4, txt5] 2 button = tk.Button(master=main_view, text="テキストファイル出力", command=lambda: write_file(txts)) 3 4def write_file(txts): 5 line = ','.join([txt.get() for txt in txts]) + '\n' 6 7 #ファイルへの書き込み 8 with open("テスト.txt", mode='a') as f: #ファイルを書き込みモードで開く。 9 f.write(line)

投稿2022/09/12 05:31

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ze6o3

2022/09/12 05:54

最近触り始めた自分でも理解できました! とても分かりやすいご回答ありがとうございます! もし回答可能でしたらお伺いしたいのですが、出力したい際にテキストボックスに入力した文字の前に各項目の”社員番号”なども一緒に出力することは可能でしょうか。
can110

2022/09/12 06:09

やりようによりますが、できると思います。 各項目のラベルも[lbl1, lbl2, ...]のようなリストとして渡してやれば for lbl, txt in zip(lbls, txts): のような感じでラベル名とテキストボックスの文字を両方とれるのでうまく組み合わせて出力すればよいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問