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

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

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

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

Python

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

Q&A

解決済

1回答

800閲覧

tkinterで欄の判別

PTK

総合スコア29

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/09/17 13:17

前提・実現したいこと

tkinterで入力欄をボタンで追加できるようにしたのですが追加した欄はどうすれば取得できますか。このコードだと最初の一個しか取得できません。ボタンを作成するときに動的に変数を作成することも考えましたが、処理速度の点であまりよろしくないそうです。

python

1import tkinter 2from tkinter import messagebox 3 4 5num = 1 6 7def button_click(): 8 input_name_value = input_name.get() 9 show_message = "名前:" + input_name_value + 'が入力されました。\n' 10 11 print(show_message) 12 13 messagebox.showinfo("入力内容" ,show_message) 14def buttonT_click(): 15 global num 16 num = num + 1 17 input_name = tkinter.Entry(width=40) 18 input_name.grid(row=num, column=2) 19 20root = tkinter.Tk() 21root.title("Python GUI") 22root.geometry("360x120") 23 24 25input_name = tkinter.Entry(width=40) 26input_name.grid(row=1, column=2) 27 28 29 30button = tkinter.Button(text="実行ボタン",command=button_click) 31button.place(x=10, y=80) 32 33buttonT = tkinter.Button(text="追加",command=buttonT_click) 34buttonT.place(x=40 ,y=80) 35 36 37root.mainloop() 38 39

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えば、input_name を作るたびに配列に格納しておくなどが考えられます。

py

1num = 1 2input_names = [] # 生成した複数のinput_nameを格納する

配列へは append メソッドでアイテムを追加できるので、まず一番最初に生成している input_name を格納し、

py

1... 2root.geometry("360x120") 3 4input_name = tkinter.Entry(width=40) 5input_name.grid(row=1, column=2) 6input_names.append(input_name) # 最初に生成したものを格納

また、ボタンで生成されるものも格納されるようにします。

py

1def buttonT_click(): 2 global num, input_names # global変数をバインド 3 num = num + 1 4 input_name = tkinter.Entry(width=40) 5 input_name.grid(row=num, column=2) 6 input_names.append(input_name) # 生成したものを格納

配列に格納したアイテムは for 一時変数名 in 配列: で順次アクセスできるので、入力内容を確認する箇所は次のようにして、格納した複数の input_item の値でメッセージを作り上げていきます。

py

1def button_click(): 2 show_message = "" # メッセージ作成用 3 # `for-in`文で配列に格納した`input_item`に順次アクセス 4 for input_name in input_names: 5 input_name_value = input_name.get() 6 show_message += "名前:" + input_name_value + 'が入力されました。\n' 7 print(show_message) 8 messagebox.showinfo("入力内容" ,show_message)

「動的に変数を作成すると処理速度が…………」というのは的を得ているとは思いません。新しい部品のインスタンスを生成する処理の重さに比べたら、そのインスタンスを変数や属性に束縛することに気にするほどの負荷があるでしょうか。

ところで、これから複雑なものを作り込んでいく予定でしたら、Tkinter の基本説明を一通り読み、初期配置する UI 部品は create_widgets() 内で生成したり、絶対座標に頼らない部品配置で組んでいくのをお勧めします。
https://docs.python.org/ja/3/library/tkinter.html

投稿2021/09/17 15:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

PTK

2021/09/18 05:08

とても分かりやすい内容ありがとうございます。無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問