Как в ООП перейти из класса в функцию вне класса? Программа работает с GUI интерфейсом. Нужно из класса передать…
Как в ООП перейти из класса в функцию вне класса? Программа работает с GUI интерфейсом. Нужно из класса передать переменную в функцию выше. Но я с синтаксисом совсем запутался, и скрипт выдает ошибку,
Ответ на вопрос
Проблема здесь в том, что вы обращаетесь к переменной lbl в функции clicked, которая находится вне класса Toplevel1. Чтобы исправить это, можно передать переменную lbl в функцию clicked как аргумент. Вот как это можно сделать:Измените функцию clicked, чтобы принимала переменную lbl в качестве аргумента:def clicked(lbl):
lbl.configure(text=selected.get())
print(lbl.configure(text=selected.get()))Измените вызов функции clicked в методе __init__ класса Toplevel1:self.Radiobutton1 = tk.Radiobutton(top, value=0, variable=self.selected, command=lambda: clicked(self.lbl))
self.Radiobutton2 = tk.Radiobutton(top, value=1, variable=self.selected, command=lambda: clicked(self.lbl))Это позволит передать переменную lbl в функцию clicked и избежать ошибки "NameError: name 'lbl' is not defined".
Еще
ООП в Python. Как организовать класс с родительским окном и класс с дочерним окном? Собственно есть такой код…
организовать класс с родительским окном и класс с дочерним окном? Собственно есть такой код накиданый мной. Изначально передо мной была задача: Создать приложение с использованием tkinter и ООП подхода
Ответ на вопрос
Ваше решение вполне корректно с точки зрения ООП и использования библиотеки Tkinter для создания GUI приложений на Python. В вашем коде основное окно (Main) является родительским, а дочернее окно (Child) вызывается при нажатии на кнопку.Однако, чтобы улучшить структуру и сделать ее более модульной, можно внести некоторые улучшения. Передача root в класс Child:
В вашем коде при создании объекта Child вы передаете root напрямую, что может привести к проблемам связанным с глобальной переменной root. Лучше передавать root в качестве аргумента:def open_dialog(self):
Child(self.master)Добавление self.master в класс Child:
Также, вам нужно изменить метод __init__ в классе Child и обратиться к родительскому окну через self.master:def __init__(self, master):
super().__init__(master)
self.title('Добавить доходы/расходы')
self.geometry('400x220+400+300')
self.resizable(False, False)Эти улучшения помогут сделать ваш код более гибким и упростят его дальнейшее развитие. В остальном, ваше решение хорошее и соответствует задаче создания оконного приложения с использованием ООП и Tkinter.
Еще