Как в ООП перейти из класса в функцию вне класса? Программа работает с 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
254 +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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир