Я пишу графический интерфейс с tkinter и пытаюсь использовать виджет ввода. Пользователи должны ввести числовое значение в поле ввода. В коде я написал функцию, которая использует введенное числовое значение в расчете, используя метод .get() для получения введенного числового значения. В конце функции вычисленное значение возвращается в поле вывода в графическом интерфейсе с помощью .set().
Код выдает ошибку, и я думаю, что это связано с тем, что пользователи должны вводить числовое значение. Кто-нибудь знает, как использовать виджет ввода и указать, что числовое значение следует вводить и использовать в функции расчета?
Ниже я добавил части своего кода. Я не показывал путь к моему файлу Excel, но в своем собственном коде я ввел путь, который относится к файлу Excel. Этот файл состоит из 3 листов, имена листов используются в выпадающем меню. Когда имя листа выбирается пользователем, расчет основывается на данных этого листа.
class user_framework(tk.Frame):
def __init__ (self):
tk.Frame.__init__(self)
self.master.title('Standardized ex-ante Framework')
self.optionsmenu = tk.StringVar()
self.existingmenu= tk.StringVar()
self.entry_weight= tk.StringVar()
self.processing_output= tk.StringVar()
self.entry_new_residue= tk.StringVar()
self.define_widgets()
self.residue_calculation()
self.grid()
def define_widgets(self):
lbl_residue_name= tk.Label(self, text='Residue name:')
lbl_residue_name.grid(row=2, column=0, sticky=tk.W, pady=2, padx=2)
xls = pd.read_excel(r"path",None)
residue_options = list(xls.keys())
self.optionsmenu.set(residue_options[0])
self.om = tk.OptionMenu(self, self.optionsmenu, *residue_options)
self.om.grid(row=2, column=1, sticky=tk.W, pady=2, padx=2)
lbl_residue_weight= tk.Label(self, text='Residue weight (kg):')
lbl_residue_weight.grid(row=3, column=0, sticky=tk.W, pady=2, padx=2)
txt_residue_weight = tk.Entry(self, width=18)
txt_residue_weight['textvariable']= self.entry_weight
txt_residue_weight.grid(row=3, column=1, sticky=tk.W, pady=2, padx=2)
btn_calculate = tk.Button(self, text='Solve', background='green', relief='groove', width=7 ,borderwidth=5, cursor='spider')
btn_calculate['command'] = lambda:[self.residue_calculation()]
btn_calculate.grid(row=2, column=2, columnspan=2, sticky=tk.W, pady=2, padx=2)
lbl_output= tk.Label(self, text='Result:')
lbl_output.grid(row=4, column=0, sticky=tk.W, pady=2, padx=2)
value_output= tk.Label(self, anchor=tk.CENTER, relief='ridge', background='white')
value_output['textvariable']= self.processing_output
value_output.grid(row=4, column=1, columnspan=2, sticky= tk.W +tk.E, pady=2, padx=2)
def residue_calculation(self):
residue_choice= self.optionsmenu.get()
residue_choice= str(residue_choice)
residue_weight= self.entry_weight.get()
residue_weight= str(residue_weight)
residue_sheet = pd.read_excel(r"path", sheet_name=residue_choice) #path refers to an excel file, within my own code I specified the path, so it is linked to an excel sheet
weight_column= residue_sheet[residue_sheet.CO2equivalent] #weight_column indicates the specified sheet and column with CO2 values which should be multiplied by the entered weight
weight_calculation= weight_column * residue_weight
self.processing_output.set(float(weight_calculation))
KeyError: "None of [Float64Index([1578803065.414701, 1578803065.414701, 1578803065.414701,\n ...\n dtype='float64')] are in the [columns]"
- person marlen   schedule 04.05.2021