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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

Python

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

Q&A

解決済

3回答

2855閲覧

tkinterで得た情報を連続して、テキストファイルに書き込みたい

YUMA-NAGAO

総合スコア41

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

Python

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

0グッド

0クリップ

投稿2019/12/24 07:22

編集2019/12/25 07:28

#前提・実現したいこと
Tkinterで確定ボタンを押したときに、テキストファイルにデータを書きこむ
下記ソースコードに記載されているconnectに入っているデータをテキストファイルに書き込みたいです。

#既に出来ている機能
1、テキストファイルに上書きする機能
2、Tkinterを使い、何度も同じ動作を繰り返す機能

この二つが出来ています。
今回は、それらを組み合わせるのが最終目的です。

#試したこと

root.mainloopの場所を変更するということを試しました。

前回の質問を基にしてテキストファイルへの書き込み方法を追記しました。

しかし、思ったような動作が出来ません。

その結果、
1、エラーが発生し、テキストファイルにtkinterに打ち込んだ時の値が、書き込める。
2、エラーが発生し、テキストファイルに打ち込んだ時の値が書き込めない。
3、エラーは発生しないが、tkinterに打ち込んだ時の値が変更されない

という状態になっています。

ググった時のキーワードは「Python tkinter textファイル書き込み」などです。

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

エラーメッセージがあるもの、エラーメッセージを記述します。

エラーメッセージ 1

Python

1 2Traceback (most recent call last): 3 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 75, in <module> 4 AjustLight() 5 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 72, in AjustLight 6 root.after(0, Light()) 7 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 39, in Light 8 one = EditBox1.get() 9 File "C:\Users\nagao\Anaconda3\envs\py3.7\lib\tkinter\__init__.py", line 2682, in get 10 return self.tk.call(self._w, 'get') 11_tkinter.TclError: invalid command name ".!toplevel.!entry"
エラーメッセージ 2

Python

1 Traceback (most recent call last): 2 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 75, in <module> 3 AjustLight() 4 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 72, in AjustLight 5 root.after(0, Light()) 6 File "C:/Users/Anaconda3/envs/py3.7/BrightnessControl.py", line 39, in Light 7 one = EditBox1.get() 8 File "C:\Users\nagao\Anaconda3\envs\py3.7\lib\tkinter\__init__.py", line 2682, in get 9 return self.tk.call(self._w, 'get') 10_tkinter.TclError: invalid command name ".!toplevel.!entry"

#該当のソースコード

Python

1import tkinter 2from tkinter import messagebox 3 4 5def AjustLight(): 6 def Light(): 7 # ここで設定Windowを Toplevel Widget にて作成 8 global top 9 global connect 10 11 top = tkinter.Toplevel(root) 12 top.deiconify() 13 top.title(u"調整") 14 top.geometry("250x150") 15 Static1 = tkinter.Label(top, text=u'光量の調整が可能です!') 16 Static1.pack() 17 Static2 = tkinter.Label(top, text=u'数字を入れてください') 18 Static2.pack() 19 EditBox1 = tkinter.Entry(top) 20 EditBox1.insert(tkinter.END, '0') 21 EditBox1.pack() 22 EditBox2 = tkinter.Entry(top) 23 EditBox2.insert(tkinter.END, '1') 24 EditBox2.pack() 25 EditBox3 = tkinter.Entry(top) 26 EditBox3.insert(tkinter.END, '2') 27 EditBox3.pack() 28 EditBox4 = tkinter.Entry(top) 29 EditBox4.insert(tkinter.END, '3') 30 EditBox4.pack() 31 32 button = tkinter.Button(top, text='確定', width='10', command=FinishEvent) 33 # command=で入れた関数に()があると、関数がうまく使うことが出来ない。 34 # (正確に言うと、起動したときに実行されてしまうので、ダメ) 35 button.pack() 36 37 root.mainloop() 38 one = EditBox1.get() 39 second = EditBox2.get() 40 third = EditBox3.get() 41 fourth = EditBox4.get() 42 43 connect = '0,' + one + ',' + second + ',' + third + ',' + fourth 44 45 path = r"C:\Users\Desktop\test.txt" 46 with open(path, "w") as f: 47 f.write(connect) 48 with open(path, "r") as f: 49 reading=f.read() 50 print(reading) 51 52 def FinishEvent(): 53 top.destroy() 54 # toplevel wigget(サブウィンドウ)を破壊する 55 ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?') 56 # 確認用ダイアログを出す 57 # 調整用のやつ 58 if ajust_onemore: 59 # 再度 mainloop内から ajust_moving() 関数を呼ぶ 60 root.after(0, Light) 61 else: 62 # 完了ダイアログを出す 63 messagebox.showinfo('', '完了!!') 64 root.destroy() 65 # rootを破棄(これでmainloopを抜けるはず) 66 67 root = tkinter.Tk() 68 root.withdraw() 69 root.after(0, Light()) 70 71 72AjustLight() 73 74print(connect) 75

#教えていただきたいこと
3点あります。

######今回の質問について

1、どのようにサンプルコードを変えればいのか?
2、サンプルコードを作成した過程(ググった時のキーワードや解決までの考え方など)
3、コードを簡潔にする方法

これらを教えていただきたいです!
自力で解決できるようになりたいので!

#回答を基に修正したコード【その1】
このコードを使うことで思った通りの動作をすることが出来た。
値を入れるボックスをglobal宣言したことで、コールバックした関数内で使えるようになりました。
このコードの実装の仕方は、少しいかがなものかと思います。
処理を変えないで、綺麗なコードにするやり方を教えていただきたいです。

Python

1import tkinter 2from tkinter import messagebox 3 4 5def AjustLight(): 6 7 8 def Light(): 9 # ここで設定Windowを Toplevel Widget にて作成 10 global top 11 global EditBox1 12 global EditBox2 13 global EditBox3 14 global EditBox4 15 top = tkinter.Toplevel(root) 16 top.deiconify() 17 top.title(u"調光") 18 top.geometry("250x150") 19 # 以下に 設定画面を作成(省略) 20 Static1 = tkinter.Label(top, text=u'光量の調整が可能です!') 21 Static1.pack() 22 Static2 = tkinter.Label(top, text=u'0-255の間で1単位で数字を入れてください') 23 Static2.pack() 24 EditBox1 = tkinter.Entry(top) 25 EditBox1.insert(tkinter.END, '0') 26 EditBox1.pack() 27 EditBox2 = tkinter.Entry(top) 28 EditBox2.insert(tkinter.END, '255') 29 EditBox2.pack() 30 EditBox3 = tkinter.Entry(top) 31 EditBox3.insert(tkinter.END, '255') 32 EditBox3.pack() 33 EditBox4 = tkinter.Entry(top) 34 EditBox4.insert(tkinter.END, '0') 35 EditBox4.pack() 36 37 38 button = tkinter.Button(top, text='確定', width='10', command=FinishEvent) 39 # command=で入れた関数に()があると、関数がうまく使うことが出来ない。 40 # (正確に言うと、起動したときに実行されてしまうので、ダメ) 41 button.pack() 42 43 root.mainloop() 44 45 def FinishEvent(): 46 one = EditBox1.get() 47 second = EditBox2.get() 48 third = EditBox3.get() 49 fourth = EditBox4.get() 50 global connect 51 connect = '0,' + one + ',' + second + ',' + third + ',' + fourth 52 53 path = r"C:\Users\Desktop\test.txt" 54 with open(path, "w") as f: 55 f.write(connect) 56 with open(path, "r") as f: 57 reading = f.read() 58 print(reading) 59 60 top.destroy() 61 # toplevel wigget(サブウィンドウ)を破壊する 62 ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?') 63 # 確認用ダイアログを出す 64 # 調整用のやつ 65 if ajust_onemore: 66 # 再度 mainloop内から ajust_moving() 関数を呼ぶ 67 root.after(0, Light) 68 else: 69 # 完了ダイアログを出す 70 messagebox.showinfo('', '完了!!') 71 root.destroy() 72 # rootを破棄(これでmainloopを抜けるはず) 73 74 root = tkinter.Tk() 75 root.withdraw() 76 77 root.after(0, Light()) 78 79 80AjustLight() 81 82print(connect) 83

#回答を基に修正したコード【完成版】
回答を基に必要な動作を加えたコードです。
入力規則などについても教えていただいて、感謝です。

Python

1import tkinter 2from tkinter import messagebox 3 4 5def AjustLight(): 6 setting_values = {} 7 top = None 8 9 def Light(): 10 # ここで設定Windowを Toplevel Widget にて作成 11 nonlocal top 12 13 14 # Entryへの入力値のValidationコマンド 15 # この中でデータをdictに格納しておく 16 def validation(name, word): 17 # 空か数値以外の入力は不可 18 result = (len(word) == 0) or word.isnumeric() 19 # 問題なければ値をconnectに格納 20 if result: 21 setting_values[name.split('.')[-1]] = word 22 23 return result 24 25 top = tkinter.Toplevel(root) 26 top.deiconify() 27 top.title(u"調整") 28 top.geometry("250x150") 29 top.protocol('WM_DELETE_WINDOW', lambda: root.destroy()) 30 vcmd = (top.register(validation), '%W', '%P') 31 Static1 = tkinter.Label(top, text=u'光量の調整が可能です!') 32 Static1.pack() 33 Static2 = tkinter.Label(top, text=u'数字を入れてください') 34 Static2.pack() 35 EditBox1 = tkinter.Entry(top, name='num0', validate='key', validatecommand=vcmd) 36 EditBox1.insert(tkinter.END, '0') 37 EditBox1.pack() 38 EditBox2 = tkinter.Entry(top, name='num1', validate='key', validatecommand=vcmd) 39 EditBox2.insert(tkinter.END, '0') 40 EditBox2.pack() 41 EditBox3 = tkinter.Entry(top, name='num2', validate='key', validatecommand=vcmd) 42 EditBox3.insert(tkinter.END, '0') 43 EditBox3.pack() 44 EditBox4 = tkinter.Entry(top, name='num3', validate='key', validatecommand=vcmd) 45 EditBox4.insert(tkinter.END, '0') 46 EditBox4.pack() 47 button = tkinter.Button(top, text='確定', width='10', command=FinishEvent) 48 button.pack() 49 50 def Save(file): 51 nonlocal setting_values 52 # connectに格納している値をリスト化 53 val = [setting_values[f'num{i}'] for i in range(4)] 54 # print(val) 55 # 上記のリストをファイルに書き込む 56 with open(file, "w") as f: 57 f.write(f'0,{val[0]},{val[1]},{val[2]},{val[3]}') 58 with open(file, 'r') as f: 59 print(f.read()) 60 # 意図した値になっているかの確認 61 62 def FinishEvent(): 63 # ここでセーブする 64 file_path=r'C:\Users\Desktop\test.txt' 65 Save(file_path) 66 top.destroy() 67 # toplevel wigget(サブウィンドウ)を破壊する 68 ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?') 69 # 確認用ダイアログを出す 70 # 調整用のやつ 71 if ajust_onemore: 72 # 再度 mainloop内から Light関数を呼ぶ 73 root.after(0, Light) 74 else: 75 # 完了ダイアログを出す 76 messagebox.showinfo('', '完了!!') 77 root.destroy() 78 # rootを破棄(これでmainloopを抜けるはず) 79 80 root = tkinter.Tk() 81 root.withdraw() 82 root.after(0, Light()) 83 root.mainloop() 84 return setting_values 85

#参考URL
知らないことを調べた。
Python の isnumeric() メソッド
tkinterのEntryにvalidationを実装する part 1 基底クラスを作る。

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

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

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

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

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

t_obara

2019/12/24 08:36

ファイルに書き込むことと、tkinterを利用することは、分けることができるので、まずはファイルに書き込むことができるようになりましょう。 「python file write」といったキーワードでググると良いです。
YUMA-NAGAO

2019/12/24 08:39

既に、それは出来います。 それを組み合わせて一連の処理で、実行したいのです。
guest

回答3

0

ベストアンサー

まずは mainloop()を元の場所にもどしましょう。

Python

1 root = tkinter.Tk() 2 root.withdraw() 3 root.after(0, Light()) 4 root.mainloop()

こうすることで、 一応

  • root(今回は描画しない)を生成して、afterイベントを発行後mainloopを回す
  • after イベント発火:Light関数がにて、設定ウィンドウ描画
  • 「確定」ボタンイベント発火:FinishEvent関数にて、設定ウィンドウ破棄&確認ダイアログ描画
    -> [yes]が選ばれた場合は再度 afterイベント発行する

と、t_obara さんの言っている基本構成になります。

で、上記の構成を踏まえた上で、「Tkinterで確定ボタンを押したときに、テキストファイルにデータを書きこむ」を実装したいのであれば、「確定」ボタンイベントの処理上でファイルを書き込む処理をするのが適当なのではないでしょうか。

実装方法としては、FinishEvent関数の先頭でファイルを書き出すだけなので、なんとでもなるかと思いますが、EditBox1~4を全てをglobalにするのもなんなので、Entryへの入力値を検証する関数を準備し、入力データが数値以外を無効にする処理を実装しつつ、その関数内で値をdictに保持するように実装してみました。

import tkinter from tkinter import messagebox def AjustLight(): setting_values = {} top = None def Light(): # ここで設定Windowを Toplevel Widget にて作成 nonlocal top # Entryへの入力値のValidationコマンド # この中でデータをdictに格納しておく def validation(name, word): # 空か数値以外の入力は不可 result = (len(word)==0) or word.isnumeric() # 問題なければ値をconnectに格納 if result: setting_values[name.split('.')[-1]] = word return result top = tkinter.Toplevel(root) top.deiconify() top.title(u"調整") top.geometry("250x150") vcmd = (top.register(validation), '%W', '%P') Static1 = tkinter.Label(top, text=u'光量の調整が可能です!') Static1.pack() Static2 = tkinter.Label(top, text=u'数字を入れてください') Static2.pack() EditBox1 = tkinter.Entry(top, name='num0', validate='key', validatecommand=vcmd) EditBox1.insert(tkinter.END, '0') EditBox1.pack() EditBox2 = tkinter.Entry(top, name='num1', validate='key', validatecommand=vcmd) EditBox2.insert(tkinter.END, '1') EditBox2.pack() EditBox3 = tkinter.Entry(top, name='num2', validate='key', validatecommand=vcmd) EditBox3.insert(tkinter.END, '2') EditBox3.pack() EditBox4 = tkinter.Entry(top, name='num3', validate='key', validatecommand=vcmd) EditBox4.insert(tkinter.END, '3') EditBox4.pack() button = tkinter.Button(top, text='確定', width='10', command=FinishEvent) # command=で入れた関数に()があると、関数がうまく使うことが出来ない。 # (正確に言うと、起動したときに実行されてしまうので、ダメ) button.pack() def Save(file): nonlocal setting_values # connectに格納している値をリスト化 val = [setting_values[f'num{i}'] for i in range(4)] #print(val) # 上記のリストをファイルに書き込む with open(file, "w") as f: f.write(f'0,{val[0]},{val[1]},{val[2]},{val[3]}') def FinishEvent(): # ここでセーブする Save("test.txt") top.destroy() # toplevel wigget(サブウィンドウ)を破壊する ajust_onemore = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?') # 確認用ダイアログを出す # 調整用のやつ if ajust_onemore: # 再度 mainloop内から ajust_moving() 関数を呼ぶ root.after(0, Light) else: # 完了ダイアログを出す messagebox.showinfo('', '完了!!') root.destroy() # rootを破棄(これでmainloopを抜けるはず) root = tkinter.Tk() root.withdraw() root.after(0, Light()) root.mainloop() return setting_values

投稿2019/12/25 03:28

magichan

総合スコア15898

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

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

YUMA-NAGAO

2019/12/25 07:04 編集

ご回答ありがとうございます。 14行目の setting_values[name.split('.')[-1]] = word の部分は、なぜこのように書くのですか? あと、27行目の vcmd = (top.register(validation), '%W', '%P') %Wや%Pとは何なのでしょうか? コードだけ読んで、理解できるようにしたいので、教えていただきたいです。 こちらのサイトhttps://qiita.com/junkmd/items/1623025afb56a8731f8dにある引数のことを指しているのでしょうか? word= setting_values[name.split('.')[-1]] という風に書くものかと思っていました。
magichan

2019/12/25 06:11

うーん。明らかに説明不足だ・・すみません。 まずは validation関数から。 この関数は Entryに入力された値の検証を行い、Falseを返すことで入力を拒否することができます。 この検証を行うにあたって必要なデータ(関数の引数に渡される値)を設定するのが '%W' '%P' となります。 詳しくは https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/entry-validation.html のTable18 を見てください。 つまり validation()関数に対して '%W'は第1引数(name)に、どのWidgetから呼ばれたかが分かるようにWidget Nameを渡す。 '%P'は第2引数(word)に Entryの入力値を渡す。 を指示している部分です。 また、Entryの引数 validate='key' の部分ですが、これはどのタイミングで検証を行うかを決めるもので、 こちらも上記のURLに記載されています。 (この設定ではキーが入力される毎にvalidation関数が呼ばれます)
magichan

2019/12/25 06:21 編集

次に setting_values ですが、これは単に入力された値を保持しているだけです。 上で説明した通り、データが入力される毎に validation関数が呼ばれますので、入力値の検証を行い有効な場合のみ setting_values にその値をdict型で保持しています。 この際に nameには ".!toplevel.num0" のような値が入ってくるようですが、最後の'num0'だけあれば十分ですので name.split('.')[-1] として最後の'num0' だけを取り出して setting_values['num0'] = '3' の様に値を保持しているということです。 で、これらの値は Save関数内で読み込まれファイルに書き出されております。
magichan

2019/12/25 06:36 編集

あと書くのを忘れておりましたが、 top.geometry() の次の行あたりに top.protocol('WM_DELETE_WINDOW', lambda: root.destroy()) などを入れて、設定ウィンドウが(右上のXボタンなどから)閉じられた場合に 見えていないトップレベルウィンドウ(root) を破棄するようにした方が良いかもしれません
YUMA-NAGAO

2019/12/25 07:01

なるほど! 理解しました!早速質問文に追記します!
guest

0

なるほど、tkinterのお作法を理解した方が良さそうですね。
構造がよくないです。
基本的に、ウィンドウやボタンといった部品配置を行い、ボタンが押されたら何をするかといった動作をコールバックなどで定義しておき、mainloopでウィンドウメッセージループを回すことが基本構成となります。

確定ボタンを押した時にファイルを書き込みたいのであれば、そのコールバック処理、現状であればFinishEventのなかにファイル書き込み処理を設定する必要があります。
また、FinishEventのなかでウィンドウを閉じるような処理をしていますが、テキストを取得した後でないとうまく動作しなくなるので、タイミングなどは考慮すべきです。

投稿2019/12/24 08:48

t_obara

総合スコア5488

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

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

YUMA-NAGAO

2019/12/25 00:10 編集

テキストをうまく取得することが出来ました。 しかし、コードが汚くなっている気がします。 追記したコードを綺麗にする方法がございましたら、教えていただきたいです。
t_obara

2020/01/08 07:20

サンプルコードや、githubにあるようなコードを読みながら、あなたが綺麗だと思うコードを参考にされてはいかがでしょうか。
YUMA-NAGAO

2020/01/09 04:08

ご回答ありがとうございます。 やらせていただきます。
guest

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter 2from tkinter import messagebox 3 4 5class Application(): 6 # サブWindow情報を格納する変数 7 top = None 8 # entry Widget情報を格納する変数 9 editBox1 = None 10 editBox2 = None 11 editBox3 = None 12 editBox4 = None 13 # ファイル書き込みを行う、ファイルパス 14 filePath = "/path_to/xxx.xxx" 15 16 # ファイルへentry Widgetの入力内容を書き込む関数 17 def saveText(self): 18 # ファイルへ書き込む内容を整える。 19 output = '0,' + self.editBox1.get() + ',' + self.editBox2.get() + \ 20 ',' + self.editBox3.get() + ',' + self.editBox4.get() 21 22 # ファイル書き込み 23 with open(self.filePath, "w") as f: 24 f.write(output) 25 26 # ファイル読み込み 27 with open(self.filePath, "r") as f: 28 print(f.read()) 29 30 # ボタンクリックされた時の処理を行う関数 31 def submit(self): 32 # ファイル書き込み機構を走らせる。 33 self.saveText() 34 35 # サブWindowを破棄する。 36 self.top.destroy() 37 38 # 再度調整を行うか判断するために、messageboxを表示する。 39 # messageboxについて : https://kuroro.blog/python/MQcodS4gkjZ4G7JYhQ9Q/ 40 isYes = messagebox.askyesno('Adjusts_Onemore', 'もう一度調整しますか?') 41 if isYes: 42 # 再度サブWindowを呼び出す。 43 Application(master=root) 44 else: 45 # 完了dialogを表示する。 46 # messageboxについて : https://kuroro.blog/python/MQcodS4gkjZ4G7JYhQ9Q/ 47 messagebox.showinfo('', '完了!!') 48 # mainloopを破棄する。 49 root.destroy() 50 51 def __init__(self, master=None): 52 # Windowを親要素として、サブWindowを作成する。 53 # Toplevelについて : https://kuroro.blog/python/kEE4RwgYN45V0lM92SDM/ 54 self.top = tkinter.Toplevel(master) 55 56 # サブWindowへタイトルをつける。 57 self.top.title("調整") 58 # サブWindowの画面サイズを設定する。 59 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 60 self.top.geometry("250x150") 61 62 # サブWindowを親要素として、label Widgetを作成する。 63 # text : テキスト情報 64 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 65 label1 = tkinter.Label(self.top, text='光量の調整が可能です!') 66 # サブWindowを親要素として、label Widgetをどのように配置するのか? 67 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 68 label1.pack() 69 70 # サブWindowを親要素として、label Widgetを作成する。 71 # text : テキスト情報 72 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 73 label2 = tkinter.Label(self.top, text='数字を入れてください') 74 # サブWindowを親要素として、label Widgetをどのように配置するのか? 75 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 76 label2.pack() 77 78 # サブWindowを親要素として、entry Widgetを作成する。 79 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 80 self.editBox1 = tkinter.Entry(self.top) 81 # entry Widget(self.editBox1)の末尾へ値を挿入する。 82 # tkinter.END : 末尾 83 self.editBox1.insert(tkinter.END, '0') 84 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 85 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 86 self.editBox1.pack() 87 88 # サブWindowを親要素として、entry Widgetを作成する。 89 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 90 self.editBox2 = tkinter.Entry(self.top) 91 # entry Widget(self.editBox2)の末尾へ値を挿入する。 92 # tkinter.END : 末尾 93 self.editBox2.insert(tkinter.END, '1') 94 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 95 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 96 self.editBox2.pack() 97 98 # サブWindowを親要素として、entry Widgetを作成する。 99 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 100 self.editBox3 = tkinter.Entry(self.top) 101 # entry Widget(self.editBox3)の末尾へ値を挿入する。 102 # tkinter.END : 末尾 103 self.editBox3.insert(tkinter.END, '2') 104 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 105 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 106 self.editBox3.pack() 107 108 # サブWindowを親要素として、entry Widgetを作成する。 109 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 110 self.editBox4 = tkinter.Entry(self.top) 111 # entry Widget(self.editBox4)の末尾へ値を挿入する。 112 # tkinter.END : 末尾 113 self.editBox4.insert(tkinter.END, '3') 114 # サブWindowを親要素として、entry Widgetをどのように配置するのか? 115 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 116 self.editBox4.pack() 117 118 # サブWindowを親要素として、button Widgetを作成する。 119 # text : テキスト情報 120 # width : 幅の設定 121 # command : ボタンをクリックした時に、実行する関数を設定。submitとする。 122 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 123 button = tkinter.Button(self.top, text='確定', 124 width='10', command=self.submit) 125 # サブWindowを親要素として、button Widgetをどのように配置するのか? 126 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 127 button.pack() 128 129 # Windowをループさせて、継続的にWindow表示させる。 130 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 131 root.mainloop() 132 133 134if __name__ == "__main__": 135 # Windowを作成する。 136 root = tkinter.Tk() 137 # Windowを非表示にする。 138 root.withdraw() 139 140 Application(master=root)

ご確認のほど、よろしくお願いいたします。????‍♂️

また質問に答えますと、

  1. どのようにサンプルコードを変えればいいのか?

・上記のように変更ください。
2. サンプルコードを作成した過程(ググった時のキーワードや解決までの考え方など)
・頭の中に入っていたので、検索することがありませんでした。すみません。。
3. コードを簡潔にする方法
・上記のように変更ください。

になります。

投稿2021/06/15 00:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問