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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

3回答

1393閲覧

pythonによるGUI作成のコードの書き方

surphy

総合スコア101

Tkinter

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

1クリップ

投稿2020/01/11 14:07

tkinterを用いて下図のようなGUIを作成しています。
しかしボタンの分だけ、次のようなコードをひたすら書いていくのは、コードが読みにくくなって仕方ないと思うのですが、何かいい書き方あるのでしょうか。それともひたすら並べていくのでしょうか。
ざっくりとした質問となり、恐縮ですが、ご回答いただければ幸いです。

python

1label_input_x0 = Tkinter.Label(text=u'x0') 2label_input_x0.pack() 3 4input_x0 = Tkinter.Entry() #EditBox 5input_x0.pack()

作成中のGUI

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

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

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

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

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

guest

回答3

0

ベストアンサー

python

1import tkinter 2 3labels = 'x0', 'y0', 'nx', 'ny', 'Px_small', 'Py_small', 'Px_large', 'Py_large' 4entries = {} 5 6root = tkinter.Tk() 7 8for label in labels: 9 tkinter.Label(text=label).pack() 10 entries[label] = tkinter.Entry() 11 entries[label].pack() 12 13def submit(): 14 for label in labels: 15 print(label, ':', entries[label].get()) 16 17tkinter.Button(text='Submit', command=submit).pack() 18 19root.mainloop()

投稿2020/01/11 16:12

編集2020/01/11 16:17
shiracamus

総合スコア5406

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

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

surphy

2020/01/12 01:17

大変参考になりました。 ご回答ありがとうございます。
guest

0

そのような書き方を冗長と考えるかどうかは、考え方によるので一概に言えないと思います。

ボタンが多いといえば電卓アプリですが、このサイトのように、べたっと書いてあるものが多いですね。

やろうと思えば、

python

1button_array[i] = Tkinter.Label(text='x{}'.format(i))

のようにボタンそのものをリストに入れることもできるので、記述は短くできると思いますけど、「n番目のボタンはxx」というような関係を別で管理しなければならないので、全体的な見通しが良くなるわけではありません。
名前とか他の属性の情報を関連付けるのであれば、dictを使うのがいいと思います。リストと組み合せることになるでしょう。 このあたりになると、ベタっと書くのと分量はあまり変わならいかもしれませんが、適切なデータ構造を選べば、規模が大きくなっても管理しやすいものにできるでしょう。

投稿2020/01/11 15:31

TakaiY

総合スコア12781

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

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

surphy

2020/01/12 01:18

リストを使えば、できるということを教えていただき、ありがとうございます! 辞書やリストをうまく使って、わかりやすいコードをかけるように工夫していきたいと思います。
guest

0

おはようございます。

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

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

python

1import tkinter 2 3labelList = 'x0', 'y0', 'nx', 'ny', 'Px_small', 'Py_small', 'Px_large', 'Py_large' 4entries = {} 5 6 7# entry Widgetへ書き込まれる内容を表示する関数 8def submit(): 9 for label in labelList: 10 print(label, ' : ', entries[label].get()) 11 12 13root = tkinter.Tk() 14 15# labelListの数だけ、label Widget, entry Widgetを作成する。 16# それぞれ作成したのちにpackを利用して、上から順に配置を行う。 17for label in labelList: 18 # Windowを親要素として、label Widgetを作成する。 19 # text : テキスト情報 20 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 21 labelTmp = tkinter.Label(root, text=label) 22 # Windowを親要素として、label Widgetをどのように配置するのか? 23 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 24 labelTmp.pack() 25 # Windowを親要素として、entry Widgetを作成する。 26 # Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 27 entry = tkinter.Entry(root) 28 # Windowを親要素として、entry Widgetをどのように配置するのか? 29 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 30 entry.pack() 31 # entry Widgetで入力されるデータを、entries(dict型)で保存する。 32 entries[label] = entry 33 34# Windowを親要素として、button Widgetを作成する。 35# text : テキスト情報 36# command : ボタンをクリックした時に、実行する関数を設定。submitとする。 37# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 38button = tkinter.Button(root, text='Submit', command=submit) 39# Windowを親要素として、button Widgetをどのように配置するのか? 40# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 41button.pack() 42 43# Windowをループさせて、継続的にWindow表示させる。 44# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 45root.mainloop()

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

投稿2021/06/14 22:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問