Расчет с числовым значением ввода

Я пишу графический интерфейс с 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)) 

person marlen    schedule 03.05.2021    source источник
comment
Вы можете посмотреть этот пост stackoverflow.com/questions/4140437/, чтобы узнать, как использовать проверку ввода   -  person j_4321    schedule 03.05.2021
comment
Я думаю, вам также следует взглянуть на stackoverflow.com/questions/8959815/ показывает способ ограничить ввод только числовыми значениями.   -  person Matrix Programmer    schedule 03.05.2021
comment
Также вы уверены, что тип данных переменной веса остатка должен быть строковым? Я думаю, что если он участвует в вычислениях, он должен быть целым числом.   -  person Matrix Programmer    schedule 03.05.2021
comment
@MatrixProgrammer Думаю, я допустил ошибку. Я действительно упоминаю целое число или число с плавающей запятой, но когда я написал int() или float(), я получил ошибку...   -  person marlen    schedule 03.05.2021
comment
@marlen, не могли бы вы предоставить трассировку или ошибку, чтобы мы могли лучше понять проблему.   -  person Matrix Programmer    schedule 03.05.2021
comment
Мне кажется, что ошибка относится к данным на определенном листе моего файла, так как я узнаю значения @MatrixProgrammer KeyError: "None of [Float64Index([1578803065.414701, 1578803065.414701, 1578803065.414701,\n ...\n dtype='float64')] are in the [columns]"   -  person marlen    schedule 04.05.2021
comment
Кроме того, когда я запускаю графический интерфейс, он сразу же показывает результаты самого верхнего параметра в меню параметров. Числовые значения, которые можно найти в приведенной выше ошибке, также относятся к самой верхней опции меню опций. (Выбранный параметр в меню параметров относится к имени листа, данные которого используются).   -  person marlen    schedule 04.05.2021
comment
Можете ли вы также сказать @marlen, какая именно строка вызывает ошибку, она должна быть упомянута в ошибке, возможно, это может помочь мне определить проблему.   -  person Matrix Programmer    schedule 04.05.2021
comment
@MatrixProgrammer Там написано: строки 105, 18, 90, 2806, 1552 и 1640. Это тоже немного странно, поскольку всего у меня всего 106 строк.   -  person marlen    schedule 05.05.2021
comment
Некоторые из строк могут быть из модуля, который вы могли использовать, в котором из-за какой-либо ошибки в написании вами кода или какой-либо другой проблемы возникла ошибка. Вот почему вы можете получать ошибки в строках, превышающих общее количество строк в вашем коде.   -  person Matrix Programmer    schedule 05.05.2021