Получить значение Entry из функции класса
Начал изучать Питона и столкнулся с проблемой Есть код
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
self.db = db
self.view_records()
def init_main(self):
frame1 = tk.Frame(bg='light grey', padx=5, pady=5)
frame1.grid(row=0, column=1, sticky=W)
self.sumbank = ttk.Entry(frame1, width=13, font=("Arial Bold", 12)) # Ввод суммы
self.sumbank.grid(row=1, column=1)
but_calc = ttk.Button(frame1, text="Расчет", width="15", command=click_raschet)
but_calc.bind('<Button-1>')
but_calc.grid(row=1, column=5, padx=10)
def click_raschet():
sum_input = sumbank.get()
Строка sumbank.get() выдает ошибку "name 'sumbank' is not defined". Уже всю голову сломал как ее победить! Как определить это имя?
Ответы (2 шт):
Вообще, имя переменная определяется элементарно:
sumbank = 123
Но в данном случае это не поможет. Похоже, что у вас табуляция съехала и нужно всю функцию
def click_raschet():
sum_input = sumbank.get()
сдвинуть вправо, чтобы она была внутри класса.
Если click_raschet у вас отдельная функция вне класса Main, то нужно обращаться к sumbank как к атрибуту объекта класса Main, пример:
import tkinter as tk
import tkinter.ttk as ttk
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
# self.db = db
# self.view_records()
def init_main(self):
frame1 = tk.Frame(bg='light grey', padx=5, pady=5)
frame1.grid(row=0, column=1, sticky=tk.W)
self.sumbank = ttk.Entry(frame1, width=13, font=("Arial Bold", 12)) # Ввод суммы
self.sumbank.grid(row=1, column=1)
but_calc = ttk.Button(frame1, text="Расчет", width="15", command=click_raschet)
but_calc.bind('<Button-1>')
but_calc.grid(row=1, column=5, padx=10)
def click_raschet():
sum_input = main.sumbank.get()
print(sum_input)
root = tk.Tk()
main = Main(root)
root.mainloop()
Либо сделайте click_raschet методом этого класса, тогда обращайтесь к атрибуту sumbank через self. Привязывать метод к кнопке тоже нужно через self (обратите внимание на комментарии <-- self в коде ниже):
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
# self.db = db
# self.view_records()
def init_main(self):
frame1 = tk.Frame(bg='light grey', padx=5, pady=5)
frame1.grid(row=0, column=1, sticky=tk.W)
self.sumbank = ttk.Entry(frame1, width=13, font=("Arial Bold", 12)) # Ввод суммы
self.sumbank.grid(row=1, column=1)
but_calc = ttk.Button(frame1, text="Расчет", width="15", command=self.click_raschet) # <-- self
but_calc.bind('<Button-1>')
but_calc.grid(row=1, column=5, padx=10)
def click_raschet(self): # <-- self
sum_input = self.sumbank.get() # <-- self
print(sum_input)