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

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

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

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

Q&A

解決済

1回答

831閲覧

pythonのOptionMenuの選ばれた選択肢をtk.Labelで表示したい

FumiKana

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2020/05/23 15:53

編集2020/05/23 16:55

Entryを使って、.get()で表示することはできるのですが、OptionMenuのドロップダウンリストで選ばれたものを表示することができません。
def showentry():で今はEntryの.get()を使って表示していますが、加えて、OptionMenuで選ばれたものも表示したいです。
以下の部分に修正を加えて、表示したいです。
entry2 = num_players.get()
b = tk.Label(text="Numbers: " + entry2, font=("Times New Roman", 18), fg="Green")
b.place(x=0, y=250)
そして、以下がコード全文です。

import

1 2root = tk.Tk() 3root.title("First Draft") 4root.geometry("1000x1000") 5host = tk.Entry(root, width=30, font=("Times New Roman", 18)) 6host.place(x=500, y=50) 7 8def showentry(): 9 entry = host.get() 10 a = tk.Label(text="Host: " + entry, font=("Times New Roman", 18), fg="Green") 11 a.place(x=0, y=200) 12 entry2 = num_players.get() 13 b = tk.Label(text="Numbers: " + entry2, font=("Times New Roman", 18), fg="Green") 14 b.place(x=0, y=250) 15 16txt_label = tk.Label(root, text="Put the host name:", font=("Times New Roman", 20), fg="black", bg="yellow") 17txt_label.place(x=200, y=50) 18optionlist = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 19var = tk.StringVar() 20var.set(optionlist[0]) 21num_players = tk.OptionMenu(root, var, *optionlist) 22num_players.config(width=10, font=("Times New Roamn", 20)) 23num_players.place(x=500, y=250) 24btn = tk.Button(root, text="Show Your Choice", font=("Times New Roman", 18), command=showentry).place(x=10, y=10) 25 26 27root.mainloop() 28コード

長文でしたので、簡易的にしました。

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

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

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

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

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

teamikl

2020/05/23 16:26 編集

出来れば実行可能な形でコードの掲載をお願いします - クラスが不完全 - "home", "change" が未定義です - import ~ mainloop() が省略されている - SyntaxError -> showentry内 - UnboundLocalError -> showentry が定義前に使われてます
FumiKana

2020/05/23 16:55

ありがとうございます。更新しましたので、ご協力をお願いします
guest

回答1

0

ベストアンサー

python

1def showentry(): 2 a = tk.Label(self, text="Host: "+entry_name.get(), font=("Times New Roman", 18) fg="Green", bg="yellow") 3 a.place(x=0, y=200)

本題から逸れますが、ここで毎回新しい Label を生成して同じ場所に配置しています。
見かけ上では問題ないかもしれませんが、
Labelの生成は一度のみでtext のみ更新するようにした方が良いです。


今はEntryの.get()を使って表示していますが、加えて、OptionMenuで選ばれたものも表示したい

StringVar 等の .trace() を使うと、値が変更されたときに関数を呼び出すことができます。

python

1import tkinter as tk 2 3if __name__ == '__main__': 4 root = tk.Tk() 5 6 labelvar = tk.StringVar(root) 7 hostvar = tk.StringVar(root) 8 optionvar = tk.IntVar(root) 9 10 def update_label(*args): 11 host = hostvar.get() 12 option = optionvar.get() 13 # ここでラベルに表示したい書式に整形 14 labelvar.set("{} {}".format(host, option)) 15 16 # 変数の値が変わったときに通知→update_label()を呼び出す 17 hostvar.trace("w", update_label) 18 optionvar.trace("w", update_label) 19 update_label() 20 21 tk.Label(root, textvar=labelvar).pack() 22 tk.Entry(root, textvar=hostvar).pack() 23 tk.OptionMenu(root, optionvar, 1, 2, 3).pack() 24 25 root.mainloop()

追記:

MenuOption に get() は無いので、設定した StringVar 経由で
変更点: num_players.get() -> var.get() で参照できます

投稿2020/05/23 16:48

編集2020/05/23 17:45
teamikl

総合スコア8664

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問