Python tkinter комбинированный список и словарь - PullRequest
0 голосов
/ 21 января 2019

Я новичок в Python и застрял в следующей проблеме.Я создал словарь с материалом в качестве ключа и показателем преломления в качестве значения.

Из поля со списком пользователь выбирает материал.В то же время я хотел бы показать показатель преломления выбранного материала.Но я не могу заставить это работать!Здесь-под мой код.Спасибо за вашу помощь.

from tkinter import *
from tkinter import ttk

def main():

    materialDict = {'XO': 1.415, 'XO2': 1.424, 'Opt-EX': 1.431, 'TYRO-97': 1.44, 'AC-100': 1.415, 'Paragon': 1.442}

    root = Tk()
    root.geometry("1600x800+0+0")
    root.title("TEST Form")
    root.configure(bg='Dodgerblue4')

    label_material = Label(root, text='Choose Material', bd=3, width=20, height=3).grid(row=0, column=1)
    var_material = StringVar()
    combo_material = ttk.Combobox(root, values=list(materialDict.keys()), justify=CENTER, textvariable=var_material)
    combo_material.grid(row=0, column=2)
    combo_material.current(0)

    label_selected = Label(root, text="Here I want to print the value of the combobox selected item ")
    label_selected.grid(row=1, column=3)

    root.mainloop()

    return

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 21 января 2019

Это можно сделать с помощью lambda.Вам необходимо связать событие <<ComboboxSelected>> с функцией callback .Вместо того, чтобы писать отдельную функцию, я сам выполнил настройку метки.

import tkinter as tk
from tkinter import ttk

def main():

    materialDict = {'XO': 1.415, 'XO2': 1.424, 'Opt-EX': 1.431, 'TYRO-97': 1.44, 'AC-100': 1.415, 'Paragon': 1.442}

    root = tk.Tk()
    root.title("TEST Form")
    root.configure(bg='Dodgerblue4')

    tk.Label(root, text='Choose Material', bd=3).grid(row=0, column=0)
    var_material = tk.StringVar()
    combo_material = ttk.Combobox(root, values=list(materialDict.keys()), justify="center", textvariable=var_material)
    <b>combo_material.bind('<<ComboboxSelected>>', lambda event: label_selected.config(text=materialDict[var_material.get()]))</b>
    combo_material.grid(row=0, column=1)
    combo_material.current(0)

    label_selected = tk.Label(root, text="Not Selected")
    label_selected.grid(row=1, column=1)

    root.mainloop()

if __name__ == '__main__':
    main()

Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...