Как в ООП перейти из класса в функцию вне класса? Программа работает с 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()

21 Авг 2019 в 06:58
207 +1
0
Ответы
1

Проблема здесь в том, что вы обращаетесь к переменной 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".

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир