Как в ООП перейти из класса в функцию вне класса? Программа работает с GUI интерфейсом. Нужно из класса передать переменную в функцию выше. Но я с синтаксисом совсем запутался, и скрипт выдает ошибку, что не видит данную переменную. Когда используешь Radiobutton1 или Radiobutton2 (41 и 45 строка), то скрипт выводит ошибку - NameError: name 'lbl' is not defined Каким образом можно исправить ее? Сам код:import sys from tkinter import * import tkinter as tk import tkinter.ttk as ttk def vp_start_gui(): global val, w, root root = tk.Tk() top = Toplevel1(root) root.mainloop() w = None def create_Toplevel1(root, *args, **kwargs): global w, w_win, rt rt = root w = tk.Toplevel(root) top = Toplevel1(w) return (w, top) def destroy_Toplevel1(): global w w.destroy() w = None def clicked(): lbl.configure(text=selected.get()) print(lbl.configure(text=selected.get())) class Toplevel1: def __init__(self, top=None): top.geometry("515x311+650+150") top.title("New Toplevel") top.configure(background="#d9d9d9") self.selected = IntVar() self.Radiobutton1 = tk.Radiobutton(top, value=0, variable=self.selected, command=clicked) self.Radiobutton1.place(relx=0.252, rely=0.257, relheight=0.08, relwidth=0.113) self.Radiobutton1.configure(text='''Radio 1''') self.Radiobutton2 = tk.Radiobutton(top, value=1, variable=self.selected, command=clicked) self.Radiobutton2.place(relx=0.583, rely=0.257, relheight=0.08 , relwidth=0.113) self.Radiobutton2.configure(text='''Radio 2''') self.Button1 = tk.Button(top) self.Button1.place(relx=0.33, rely=0.386, height=64, width=137) self.Button1.configure(text='''Button''') self.Button1.configure(width=137) self.lbl = Label(top) self.lbl.grid(column=0, row=1) if __name__ == '__main__': vp_start_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".
Проблема здесь в том, что вы обращаетесь к переменной 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".