teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

11

文章を構成しなおした。

2019/12/25 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -343,5 +343,6 @@
343
343
 
344
344
  ```
345
345
  #参考URL
346
+ 知らないことを調べた。
346
347
  [Python の isnumeric() メソッド](https://qiita.com/f0o0o/items/f2f173219be88139589f)
347
348
  [tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。](https://qiita.com/junkmd/items/1623025afb56a8731f8d)

10

参考文献が抜けていたので、追記した。

2019/12/25 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -253,7 +253,8 @@
253
253
 
254
254
  ```
255
255
  #回答を基に修正したコード【完成版】
256
-
256
+ 回答を基に必要な動作を加えたコードです。
257
+ 入力規則などについても教えていただいて、感謝です。
257
258
  ```Python
258
259
  import tkinter
259
260
  from tkinter import messagebox
@@ -340,6 +341,7 @@
340
341
  root.mainloop()
341
342
  return setting_values
342
343
 
343
-
344
-
345
- ```
344
+ ```
345
+ #参考URL
346
+ [Python の isnumeric() メソッド](https://qiita.com/f0o0o/items/f2f173219be88139589f)
347
+ [tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。](https://qiita.com/junkmd/items/1623025afb56a8731f8d)

9

回答コードの追加

2019/12/25 07:26

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -255,6 +255,91 @@
255
255
  #回答を基に修正したコード【完成版】
256
256
 
257
257
  ```Python
258
+ import tkinter
259
+ from tkinter import messagebox
258
260
 
259
261
 
262
+ def AjustLight():
263
+ setting_values = {}
264
+ top = None
265
+
266
+ def Light():
267
+ # ここで設定Windowを Toplevel Widget にて作成
268
+ nonlocal top
269
+
270
+
271
+ # Entryへの入力値のValidationコマンド
272
+ # この中でデータをdictに格納しておく
273
+ def validation(name, word):
274
+ # 空か数値以外の入力は不可
275
+ result = (len(word) == 0) or word.isnumeric()
276
+ # 問題なければ値をconnectに格納
277
+ if result:
278
+ setting_values[name.split('.')[-1]] = word
279
+
280
+ return result
281
+
282
+ top = tkinter.Toplevel(root)
283
+ top.deiconify()
284
+ top.title(u"調整")
285
+ top.geometry("250x150")
286
+ top.protocol('WM_DELETE_WINDOW', lambda: root.destroy())
287
+ vcmd = (top.register(validation), '%W', '%P')
288
+ Static1 = tkinter.Label(top, text=u'光量の調整が可能です!')
289
+ Static1.pack()
290
+ Static2 = tkinter.Label(top, text=u'数字を入れてください')
291
+ Static2.pack()
292
+ EditBox1 = tkinter.Entry(top, name='num0', validate='key', validatecommand=vcmd)
293
+ EditBox1.insert(tkinter.END, '0')
294
+ EditBox1.pack()
295
+ EditBox2 = tkinter.Entry(top, name='num1', validate='key', validatecommand=vcmd)
296
+ EditBox2.insert(tkinter.END, '0')
297
+ EditBox2.pack()
298
+ EditBox3 = tkinter.Entry(top, name='num2', validate='key', validatecommand=vcmd)
299
+ EditBox3.insert(tkinter.END, '0')
300
+ EditBox3.pack()
301
+ EditBox4 = tkinter.Entry(top, name='num3', validate='key', validatecommand=vcmd)
302
+ EditBox4.insert(tkinter.END, '0')
303
+ EditBox4.pack()
304
+ button = tkinter.Button(top, text='確定', width='10', command=FinishEvent)
305
+ button.pack()
306
+
307
+ def Save(file):
308
+ nonlocal setting_values
309
+ # connectに格納している値をリスト化
310
+ val = [setting_values[f'num{i}'] for i in range(4)]
311
+ # print(val)
312
+ # 上記のリストをファイルに書き込む
313
+ with open(file, "w") as f:
314
+ f.write(f'0,{val[0]},{val[1]},{val[2]},{val[3]}')
315
+ with open(file, 'r') as f:
316
+ print(f.read())
317
+ # 意図した値になっているかの確認
318
+
319
+ def FinishEvent():
320
+ # ここでセーブする
321
+ file_path=r'C:\Users\Desktop\test.txt'
322
+ Save(file_path)
323
+ top.destroy()
324
+ # toplevel wigget(サブウィンドウ)を破壊する
325
+ ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
326
+ # 確認用ダイアログを出す
327
+ # 調整用のやつ
328
+ if ajust_onemore:
329
+ # 再度 mainloop内から Light関数を呼ぶ
330
+ root.after(0, Light)
331
+ else:
332
+ # 完了ダイアログを出す
333
+ messagebox.showinfo('', '完了!!')
334
+ root.destroy()
335
+ # rootを破棄(これでmainloopを抜けるはず)
336
+
337
+ root = tkinter.Tk()
338
+ root.withdraw()
339
+ root.after(0, Light())
340
+ root.mainloop()
341
+ return setting_values
342
+
343
+
344
+
260
345
  ```

8

修正

2019/12/25 07:23

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -252,7 +252,9 @@
252
252
  print(connect)
253
253
 
254
254
  ```
255
- #回答を基に修正したコード【その2
255
+ #回答を基に修正したコード【完成版
256
256
 
257
257
  ```Python
258
+
259
+
258
260
  ```

7

文章を構成しなおした。

2019/12/25 07:03

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -161,7 +161,7 @@
161
161
  これらを教えていただきたいです!
162
162
  自力で解決できるようになりたいので!
163
163
 
164
- #回答を基に修正したコード
164
+ #回答を基に修正したコード【その1】
165
165
  このコードを使うことで思った通りの動作をすることが出来た。
166
166
  値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになりました。
167
167
  このコードの実装の仕方は、少しいかがなものかと思います。
@@ -251,4 +251,8 @@
251
251
 
252
252
  print(connect)
253
253
 
254
+ ```
255
+ #回答を基に修正したコード【その2】
256
+
257
+ ```Python
254
258
  ```

6

文章を構成しなおした。

2019/12/25 07:00

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -163,8 +163,9 @@
163
163
 
164
164
  #回答を基に修正したコード
165
165
  このコードを使うことで思った通りの動作をすることが出来た。
166
- 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになた。
166
+ 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになりました。
167
+ このコードの実装の仕方は、少しいかがなものかと思います。
167
- コードが少しわかりにくくった気がするため、コードを綺麗にする方法が知りたいです。
168
+ 処理を変えいで綺麗なコードにする方を教えていだきたいです。
168
169
 
169
170
  ```Python
170
171
  import tkinter

5

文章の修正をしました。

2019/12/25 04:09

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -155,11 +155,9 @@
155
155
 
156
156
  1、どのようにサンプルコードを変えればいのか?
157
157
  2、サンプルコードを作成した過程(ググった時のキーワードや解決までの考え方など)
158
+ 3、コードを簡潔にする方法
158
159
 
159
- ######コードを簡潔にする方法
160
- 3、コードが冗長になっている気がするので、もっときれいなコーディング方法がありましたら教えていただきたいです。
161
160
 
162
-
163
161
  これらを教えていただきたいです!
164
162
  自力で解決できるようになりたいので!
165
163
 

4

既に出来ていることの記述

2019/12/25 04:04

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -2,6 +2,13 @@
2
2
  Tkinterで確定ボタンを押したときに、テキストファイルにデータを書きこむ
3
3
  下記ソースコードに記載されているconnectに入っているデータをテキストファイルに書き込みたいです。
4
4
 
5
+ #既に出来ている機能
6
+ 1、テキストファイルに上書きする機能
7
+ 2、Tkinterを使い、何度も同じ動作を繰り返す機能
8
+
9
+ この二つが出来ています。
10
+ 今回は、それらを組み合わせるのが最終目的です。
11
+
5
12
  #試したこと
6
13
 
7
14
  root.mainloopの場所を変更するということを試しました。

3

回答をもとにした新たなコードの追記

2019/12/25 00:20

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
@@ -1,1 +1,1 @@
1
- tkinterで得た情報をテキストファイルに書き込みたい
1
+ tkinterで得た情報を連続して、テキストファイルに書き込みたい
body CHANGED
@@ -154,4 +154,95 @@
154
154
 
155
155
 
156
156
  これらを教えていただきたいです!
157
- 自力で解決できるようになりたいので!
157
+ 自力で解決できるようになりたいので!
158
+
159
+ #回答を基に修正したコード
160
+ このコードを使うことで思った通りの動作をすることが出来た。
161
+ 値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになった。
162
+ コードが少しわかりにくくなった気がするため、コードを綺麗にする方法が知りたいです。
163
+
164
+ ```Python
165
+ import tkinter
166
+ from tkinter import messagebox
167
+
168
+
169
+ def AjustLight():
170
+
171
+
172
+ def Light():
173
+ # ここで設定Windowを Toplevel Widget にて作成
174
+ global top
175
+ global EditBox1
176
+ global EditBox2
177
+ global EditBox3
178
+ global EditBox4
179
+ top = tkinter.Toplevel(root)
180
+ top.deiconify()
181
+ top.title(u"調光")
182
+ top.geometry("250x150")
183
+ # 以下に 設定画面を作成(省略)
184
+ Static1 = tkinter.Label(top, text=u'光量の調整が可能です!')
185
+ Static1.pack()
186
+ Static2 = tkinter.Label(top, text=u'0-255の間で1単位で数字を入れてください')
187
+ Static2.pack()
188
+ EditBox1 = tkinter.Entry(top)
189
+ EditBox1.insert(tkinter.END, '0')
190
+ EditBox1.pack()
191
+ EditBox2 = tkinter.Entry(top)
192
+ EditBox2.insert(tkinter.END, '255')
193
+ EditBox2.pack()
194
+ EditBox3 = tkinter.Entry(top)
195
+ EditBox3.insert(tkinter.END, '255')
196
+ EditBox3.pack()
197
+ EditBox4 = tkinter.Entry(top)
198
+ EditBox4.insert(tkinter.END, '0')
199
+ EditBox4.pack()
200
+
201
+
202
+ button = tkinter.Button(top, text='確定', width='10', command=FinishEvent)
203
+ # command=で入れた関数に()があると、関数がうまく使うことが出来ない。
204
+ # (正確に言うと、起動したときに実行されてしまうので、ダメ)
205
+ button.pack()
206
+
207
+ root.mainloop()
208
+
209
+ def FinishEvent():
210
+ one = EditBox1.get()
211
+ second = EditBox2.get()
212
+ third = EditBox3.get()
213
+ fourth = EditBox4.get()
214
+ global connect
215
+ connect = '0,' + one + ',' + second + ',' + third + ',' + fourth
216
+
217
+ path = r"C:\Users\Desktop\test.txt"
218
+ with open(path, "w") as f:
219
+ f.write(connect)
220
+ with open(path, "r") as f:
221
+ reading = f.read()
222
+ print(reading)
223
+
224
+ top.destroy()
225
+ # toplevel wigget(サブウィンドウ)を破壊する
226
+ ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?')
227
+ # 確認用ダイアログを出す
228
+ # 調整用のやつ
229
+ if ajust_onemore:
230
+ # 再度 mainloop内から ajust_moving() 関数を呼ぶ
231
+ root.after(0, Light)
232
+ else:
233
+ # 完了ダイアログを出す
234
+ messagebox.showinfo('', '完了!!')
235
+ root.destroy()
236
+ # rootを破棄(これでmainloopを抜けるはず)
237
+
238
+ root = tkinter.Tk()
239
+ root.withdraw()
240
+
241
+ root.after(0, Light())
242
+
243
+
244
+ AjustLight()
245
+
246
+ print(connect)
247
+
248
+ ```

2

リンクの追加

2019/12/25 00:17

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -3,9 +3,14 @@
3
3
  下記ソースコードに記載されているconnectに入っているデータをテキストファイルに書き込みたいです。
4
4
 
5
5
  #試したこと
6
+
7
+ root.mainloopの場所を変更するということを試しました。
8
+
6
- [前回の質問](https://teratail.com/questions/220007)をもとにテキストファイル操作を書きました。
9
+ [前回の質問](https://teratail.com/questions/220007)をしてテキストファイルへの書き込み方法を追記しました。
10
+
7
- しかし、ファイルを操作する動作を関数外に記述すると、動作しない
11
+ しかし、思ったような動作が出来ません
8
- root.mainloopの場所を3つの変更を試しました。
12
+
13
+
9
14
  その結果、
10
15
  1、エラーが発生し、テキストファイルにtkinterに打ち込んだ時の値が、書き込める。
11
16
  2、エラーが発生し、テキストファイルに打ち込んだ時の値が書き込めない。

1

リンクの追加

2019/12/24 07:28

投稿

YUMA-NAGAO
YUMA-NAGAO

スコア41

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  下記ソースコードに記載されているconnectに入っているデータをテキストファイルに書き込みたいです。
4
4
 
5
5
  #試したこと
6
- 前回の質問をもとにテキストファイル操作を書きました。
6
+ [前回の質問](https://teratail.com/questions/220007)をもとにテキストファイル操作を書きました。
7
7
  しかし、ファイルを操作する動作を関数外に記述すると、動作しない。
8
8
  root.mainloopの場所を3つの変更を試しました。
9
9
  その結果、