#!/usr/bin/python3 #coding=utf8 from tkinter import Tk from tkinter import Label from tkinter import Entry from tkinter import Button def calculate(**kwargs): for key, value in kwargs.items(): try: locals()[key] = value["type"](value["value"].get()) except ValueError: locals()[key] = value["type"](value["default"]) print(locals()) print(mu) def make_gui(title, **kwargs): root = Tk() root.title(title) i = 0 args = {} for key, variable in kwargs.items(): var = {} key_txt = key Label(text=variable["label"]).grid(row=i) key = Entry() key.grid(row=i, column=1) var["value"] = key var["type"] = variable["type"] var["default"] = variable["default"] kwargs[key_txt] = var i += 1 message_button = Button(text="Рассчитать", command=lambda: calculate(**kwargs)) message_button.grid(row=(i + 1), column=2, padx=5, pady=5, sticky="e") root.mainloop() gui_title = "Лабораторная работа № 6. ТМО." gui_var_lmbd = {"label": "Интенсивность поломки станков (в ед. вр.):", "type": float, "default": 0.5} gui_var_mu = {"label": "Интенсивность починки станков (в ед. вр.):", "type": float, "default": 2.5} gui_vars = {"lmbd": gui_var_lmbd, "mu": gui_var_mu} make_gui(gui_title, **gui_vars)
Затык в момент объявления переменных через locals(). Вроде все перечитал не могу понять в чем проблема. Возникает ошибка:
NameError: name ‘mu’ is not defined
Однако print(locals()) говорит, что она есть:
{'mu': 2.5, ‘key’: ‘lmbd’, ‘kwargs’: {'mu': {'type': <class ‘float’>, ‘default’: 2.5, ‘value’: <tkinter.Entry object .140529577587040>}, ‘lmbd’: {'type': <class ‘float’>, ‘default’: 0.5, ‘value’: <tkinter.Entry object .140529576789496>}}, ‘lmbd’: 0.5, ‘value’: {'type': <class ‘float’>, ‘default’: 0.5, ‘value’: <tkinter.Entry object .140529576789496>}}
Скажите что я делаю не так ну и заодно жду критики самой идей, стиля кода и т.д.