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

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

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

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

Python

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

Q&A

解決済

1回答

3484閲覧

作ったGUIのページ内容を保存したい

fuji36_om

総合スコア8

Tkinter

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

Python

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

0グッド

0クリップ

投稿2020/08/25 02:20

編集2020/08/25 03:26

前提・実現したいこと

作ったGUIのページ内容を保存したい。

作ったGUIのページ内容(No1~No11の人物の姓、名、性別、生年月日)
をtxtデータにて保存できるようにしたい。

teratail内あるいは、その他のサイトにて似たようなことをしているプログラムはないでしょうか。

あるいは、どのようにプログラムば良いか教えていただければ幸いです。

該当のソースコード

python

1#tkinterのインポート 2import tkinter as tk 3 4# ウィンドウを作成 5root = tk.Tk() 6root.title("Hello, World!") # タイトル 7root.geometry("500x300") # サイズ 8 9b = tk.Label(text="コントロール画面")# 文字の出力 10b.pack() 11 12 13#全Entry消去(前処理用) 14def clear(): 15 txt_No11.delete(0, tk.END) 16 txt_No12.delete(0, tk.END) 17 txt_No13.delete(0, tk.END) 18 txt_No21.delete(0, tk.END) 19 txt_No22.delete(0, tk.END) 20 txt_No23.delete(0, tk.END) 21 txt_No31.delete(0, tk.END) 22 txt_No32.delete(0, tk.END) 23 txt_No33.delete(0, tk.END) 24 txt_No41.delete(0, tk.END) 25 txt_No42.delete(0, tk.END) 26 txt_No43.delete(0, tk.END) 27 txt_No51.delete(0, tk.END) 28 txt_No52.delete(0, tk.END) 29 txt_No53.delete(0, tk.END) 30 31#全Entry再入力 32def hyoji(index): 33 txt_No11.insert(tk.END,no[index]) 34 txt_No21.insert(tk.END,[index]) 35 txt_No31.insert(tk.END,[index]) 36 txt_No41.insert(tk.END,性別[index]) 37 txt_No51.insert(tk.END,生年月日[index]) 38 39 index +=1 40 #print('index:', index)#確認用 41 if( index >= len(no)) : return 42 txt_No12.insert(tk.END,no[index]) 43 txt_No22.insert(tk.END,[index]) 44 txt_No32.insert(tk.END,[index]) 45 txt_No42.insert(tk.END,性別[index]) 46 txt_No52.insert(tk.END,生年月日[index]) 47 48 index +=1 49 #print('index:', index)#確認用 50 if( index >= len(no)) : return 51 txt_No13.insert(tk.END,no[index]) 52 txt_No23.insert(tk.END,[index]) 53 txt_No33.insert(tk.END,[index]) 54 txt_No43.insert(tk.END,性別[index]) 55 txt_No53.insert(tk.END,生年月日[index]) 56 57 58#前ボタン_前ページを出力 59def btn_prev(): 60 global pageid 61 if pageid-3 <0: 62 return 63 no[pageid] = txt_No11.get() 64 print(txt_No11.get()) 65 clear() 66 pageid-=3 67 hyoji(pageid) 68 69 70#次ボタン_次ページを出力 71def btn_next(): 72 global pageid 73 if pageid+3 >len(no): 74 return 75 clear() 76 pageid+=3 77 hyoji(pageid) 78 79 80#保存 81def btn_save(): 82 print('動作確認') 83 return 84 85 86# 各種ボタン設定 87Prev_button = tk.Button(root,text='前ボタン',command = btn_prev).place(width=50,x=300,y=250) 88Next_button = tk.Button(root,text='次ボタン',command = btn_next).place(width=50,x=375,y=250) 89Save_button = tk.Button(root,text='保存',command = btn_save).place(width=50,x=75,y=250) 90 91 92# テキスト注釈を表示 93lbl_1 = tk.Label(text='No.') 94lbl_1.place(x=30, y=50) 95 96lbl_2 = tk.Label(text='姓') 97lbl_2.place(x=110, y=50) 98 99lbl_3 = tk.Label(text='名') 100lbl_3.place(x=220, y=50) 101 102lbl_4 = tk.Label(text='性別') 103lbl_4.place(x=330, y=50) 104 105lbl_5 = tk.Label(text='生年月日') 106lbl_5.place(x=400, y=50) 107 108# テキストボックス1(No) 109txt_No11 = tk.Entry(width=8) 110txt_No11.place(x=30, y=80) 111 112txt_No12 = tk.Entry(width=8) 113txt_No12.place(x=30, y=110) 114 115txt_No13 = tk.Entry(width=8) 116txt_No13.place(x=30, y=140) 117 118 119# テキストボックス2(姓) 120txt_No21 = tk.Entry(width=12) 121txt_No21.place(x=110, y=80) 122 123txt_No22 = tk.Entry(width=12) 124txt_No22.place(x=110, y=110) 125 126txt_No23 = tk.Entry(width=12) 127txt_No23.place(x=110, y=140) 128 129 130# テキストボックス3(名前) 131txt_No31 = tk.Entry(width=12) 132txt_No31.place(x=220, y=80) 133 134txt_No32 = tk.Entry(width=12) 135txt_No32.place(x=220, y=110) 136 137txt_No33 = tk.Entry(width=12) 138txt_No33.place(x=220, y=140) 139 140 141# テキストボックス4(性別) 142txt_No41 = tk.Entry(width=8) 143txt_No41.place(x=330, y=80) 144 145txt_No42 = tk.Entry(width=8) 146txt_No42.place(x=330, y=110) 147 148txt_No43 = tk.Entry(width=8) 149txt_No43.place(x=330, y=140) 150 151 152# テキストボックス5(生年月日) 153txt_No51 = tk.Entry(width=12) 154txt_No51.place(x=400, y=80) 155 156txt_No52 = tk.Entry(width=12) 157txt_No52.place(x=400, y=110) 158 159txt_No53 = tk.Entry(width=12) 160txt_No53.place(x=400, y=140) 161 162no = ["1","2","3","4","5","6","7","8","9","10","11"] 163= ["渡邊","柳川","清野","根本","阿部","稲田","木内","三宅","石村","本郷","山田"] 164= ["沙樹","和臣","菜緒","駿斗","亜依","和徳","喜雄","美南","比呂","香帆","比呂"] 165性別 = ["女","男","女","男","女","男","男","女","男","女","男","女","男"] 166生年月日 = ["1988/07/15","1966/09/04","1979/06/08","1992/03/14","1977/04/04", 167 "1963/11/06","1972/08/21","1992/11/30","1967/12/07","1965/03/20","1977/04/04"] 168pageid = 0 169hyoji(pageid) 170 171root.mainloop( )

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

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

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

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

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

guest

回答1

0

ベストアンサー

基本的にはwith openを使って指定したファイルに書き込むだけです。
ただEntryが複数あり、全て個別の変数で宣言されていると、
同じような処理にも関わらず、全ての変数に書かなければならず、
面倒な上、変更が入った場合修正忘れが出やすくなりバグの温床にもなります。
そのためEntryを配列で宣言する方法で書き直してみましたので参考の程を。

python

1#tkinterのインポート 2import tkinter as tk 3 4# ウィンドウを作成 5root = tk.Tk() 6root.title("Hello, World!") # タイトル 7root.geometry("500x300") # サイズ 8 9b = tk.Label(text="コントロール画面")# 文字の出力 10b.pack() 11 12#全Entry消去(前処理用) 13def clear(): 14 for clist in txt_list: 15 for etxt in clist: 16 etxt.delete(0, tk.END) 17 18#全Entry再入力 19def hyoji(index): 20 def txt_insert(txt_clist): 21 txt_clist[0].insert(tk.END,no[index]) 22 txt_clist[1].insert(tk.END,[index]) 23 txt_clist[2].insert(tk.END,[index]) 24 txt_clist[3].insert(tk.END,性別[index]) 25 txt_clist[4].insert(tk.END,生年月日[index]) 26 27 txt_insert(txt_list[0]) 28 29 index +=1 30 #print('index:', index)#確認用 31 if( index >= len(no)) : return 32 txt_insert(txt_list[1]) 33 34 index +=1 35 #print('index:', index)#確認用 36 if( index >= len(no)) : return 37 txt_insert(txt_list[2]) 38 39 40#前ボタン_前ページを出力 41def btn_prev(): 42 global pageid 43 if pageid-3 <0: 44 return 45 no[pageid] = txt_list[0][0].get() 46 print(txt_list[0][0].get()) 47 clear() 48 pageid-=3 49 hyoji(pageid) 50 51 52#次ボタン_次ページを出力 53def btn_next(): 54 global pageid 55 if pageid+3 >len(no): 56 return 57 clear() 58 pageid+=3 59 hyoji(pageid) 60 61 62#保存 63def btn_save(): 64 def write_txt(f, txt_clist): 65 #入力チェック 66 for etxt in txt_clist: 67 #No.~生年月日まで全て入力されていなければ書き出し対象外 68 if not etxt.get(): return 69 f.write(f'No.:{txt_clist[0].get()}、姓:{txt_clist[1].get()}、名:{txt_clist[2].get()}、性別:{txt_clist[3].get()}、生年月日:{txt_clist[4].get()}\n') 70 71 print('動作確認') 72 #追記でファイルに書き込み 73 with open('test.txt', mode='a') as f: 74 for txt_clist in txt_list: 75 write_txt(f, txt_clist) 76 77 78# 各種ボタン設定 79Prev_button = tk.Button(root,text='前ボタン',command = btn_prev).place(width=50,x=300,y=250) 80Next_button = tk.Button(root,text='次ボタン',command = btn_next).place(width=50,x=375,y=250) 81Save_button = tk.Button(root,text='保存',command = btn_save).place(width=50,x=75,y=250) 82 83 84# テキスト注釈を表示 85lbl_1 = tk.Label(text='No.') 86lbl_1.place(x=30, y=50) 87 88lbl_2 = tk.Label(text='姓') 89lbl_2.place(x=110, y=50) 90 91lbl_3 = tk.Label(text='名') 92lbl_3.place(x=220, y=50) 93 94lbl_4 = tk.Label(text='性別') 95lbl_4.place(x=330, y=50) 96 97lbl_5 = tk.Label(text='生年月日') 98lbl_5.place(x=400, y=50) 99 100# テキストボックス配列 101txt_list = [[None] * 5 for i in range(3)] 102 103# テキストボックス1(No) 104txt_list[0][0] = tk.Entry(width=8) 105txt_list[0][0].place(x=30, y=80) 106 107txt_list[1][0] = tk.Entry(width=8) 108txt_list[1][0].place(x=30, y=110) 109 110txt_list[2][0] = tk.Entry(width=8) 111txt_list[2][0].place(x=30, y=140) 112 113 114# テキストボックス2(姓) 115txt_list[0][1] = tk.Entry(width=12) 116txt_list[0][1].place(x=110, y=80) 117 118txt_list[1][1] = tk.Entry(width=12) 119txt_list[1][1].place(x=110, y=110) 120 121txt_list[2][1] = tk.Entry(width=12) 122txt_list[2][1].place(x=110, y=140) 123 124 125# テキストボックス3(名前) 126txt_list[0][2] = tk.Entry(width=12) 127txt_list[0][2].place(x=220, y=80) 128 129txt_list[1][2] = tk.Entry(width=12) 130txt_list[1][2].place(x=220, y=110) 131 132txt_list[2][2] = tk.Entry(width=12) 133txt_list[2][2].place(x=220, y=140) 134 135 136# テキストボックス4(性別) 137txt_list[0][3] = tk.Entry(width=8) 138txt_list[0][3].place(x=330, y=80) 139 140txt_list[1][3] = tk.Entry(width=8) 141txt_list[1][3].place(x=330, y=110) 142 143txt_list[2][3] = tk.Entry(width=8) 144txt_list[2][3].place(x=330, y=140) 145 146 147# テキストボックス5(生年月日) 148txt_list[0][4] = tk.Entry(width=12) 149txt_list[0][4].place(x=400, y=80) 150 151txt_list[1][4] = tk.Entry(width=12) 152txt_list[1][4].place(x=400, y=110) 153 154txt_list[2][4] = tk.Entry(width=12) 155txt_list[2][4].place(x=400, y=140) 156 157no = ["1","2","3","4","5","6","7","8","9","10","11"] 158= ["渡邊","柳川","清野","根本","阿部","稲田","木内","三宅","石村","本郷","山田"] 159= ["沙樹","和臣","菜緒","駿斗","亜依","和徳","喜雄","美南","比呂","香帆","比呂"] 160性別 = ["女","男","女","男","女","男","男","女","男","女","男","女","男"] 161生年月日 = ["1988/07/15","1966/09/04","1979/06/08","1992/03/14","1977/04/04", 162 "1963/11/06","1972/08/21","1992/11/30","1967/12/07","1965/03/20","1977/04/04"] 163pageid = 0 164hyoji(pageid) 165 166root.mainloop() 167

投稿2020/08/25 05:23

yureighost

総合スコア2183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問