• 締切済み

tkinterのコンボボックスとラベルの連携表示

以下のサイトを参考に、Pythonのtkinterを用いて簡単なGUIを作成しています。 https://office54.net/python/tkinter/ttk-combobox-widget https://toolmania.info/post-12996/ 現在、コンボボックスとラベルの連携表示において、上手く想定通りの挙動を示さず困っております。 下記のコードにおいて、 「combobox」の値(クリックして選択)を変更した際に、 label1: list1を反映しているコンボボックスの文字列をそのまま反映、 label2: label1用のウィジェット変数(strvalue_widget)の文字列をlist1から検索して要素番号(インデックス)を取得し、更にlist2から同じ要素番号の数値を反映 という表示を行いたく考えているのですが、 実際にコンボボックスをクリックした際、label2の表示が空白となってしまう状態です。 しかし、確認のためにlabel2用のウィジェット変数(floatvalue_widget)を出力してみる(25行目)と、クリック毎に適切な値が出力されます。 (ウィジェット変数としては正しく認識されているにもかかわらず、表示だけが適切にされないという不可解な状況になっています。) 色々と試行錯誤してみましたが、label2は空白もしくはデフォルト値(0.1)から変わらないだけで、 どうしてもきちんと連動した動きを見せてくれませんでした。 お手数をお掛けして申し訳ありませんが、どなたかお詳しい方がおられましたら、 是非教えていただけますと助かります。 よろしくお願いします。 【以下、問題としているサンプルコード】 import tkinter as tk from tkinter import ttk list1 = ["No.1", "No.2", "No.3", "No.4", "No.5"] list2 = [0.1, 0.2, 0.3, 0.4, 0.5] #rootメインウィンドウの設定 root = tk.Tk() #メインフレームの作成と設置 frame = ttk.Frame(root) frame.grid(column=0, row=0, sticky=tk.NSEW, padx=5, pady=10) strvalue_widget = tk.StringVar(value=list1[0]) floatvalue_widget = tk.DoubleVar(value=list2[0]) label1 = ttk.Label(frame, textvariable=strvalue_widget) label2 = ttk.Label(frame, textvariable=floatvalue_widget) combobox = ttk.Combobox(frame, textvariable=strvalue_widget, values=list1) def combobox_clicked(event): global floatvalue_widget floatvalue_widget = float(list2[list1.index(combobox.get())]) print(f"確認 floatvalue_widget: {floatvalue_widget}") return combobox.bind("<<ComboboxSelected>>", combobox_clicked) #レイアウト label1.grid(row=0, column=0) label2.grid(row=0, column=1) combobox.grid(row=0, column=2) #GUIウィンドウを常駐表示 root.mainloop()

みんなの回答

回答No.1

set と get メソッドを使いましょう。 floatvalue_widget.set(float(list2[list1.index(combobox.get())])) print(f"確認 floatvalue_widget: {floatvalue_widget.get()}")

関連するQ&A