Невозможно получить доступ к переменной в функции, которая принадлежит другой функции того же класса - PullRequest
0 голосов
/ 30 октября 2019

Я создаю графический интерфейс с tkinter в python. Я пытаюсь получить доступ к переменной в функции, которая принадлежит другой функции в том же классе. Получение объекта Frame2 не имеет атрибута self.workingarea. Ошибка происходит из-за функции tools.Iя пытаюсь получить доступ к self.workingarea из функции окна проекта в функции tools.line no: 28

class Frame2:
    def __init__(self,root):
        self.list=["label","Button","Entry","Text","Frame","RadioButton","Checkbutton","Canvas","LabelFrame","Notebook","ScaleWidget"]
        self.w2=root
        self.w2.state('zoomed')
        self.w2.title("IDE")
        self.w2.configure(background="white")
        self.tools()
        self.projectwindow()
        #=============
    def projectwindow(self):
        self.workingarea=Tk()
        self.workingarea.geometry('930x660+5+25')
        self.workingarea.mainloop()
        #================
    def tools(self):
        self.prop=ttk.Notebook(self.w2,width=self.w2.winfo_screenwidth()-int(self.w2.winfo_screenwidth()*0.7),height=self.w2.winfo_screenheight())
        self.prop.place(x=self.w2.winfo_screenwidth()-int(self.w2.winfo_screenwidth()*0.3),y=0)
        self.widgets=Frame(self.prop,bg="white")
        self.root_properties=Frame(self.prop,bg="white")
        self.properties=Frame(self.prop)
        self.prop.add(self.widgets,text='Widgets',compound=TOP)
        self.prop.add(self.root_properties,text='Root Window Properties',compound=TOP)
        self.prop.add(self.properties,text='Properties',compound=TOP)
        #=========
        self.widget_section=LabelFrame(self.widgets,text='TK Widgets',padx=5,pady=15,bg='white')
        self.widget_section.place(x=10,y=10)
        self.obj=labels(self.workingarea,self.properties)
        for self.i in range(11):
            self.btn_widgets=Button(self.widget_section,text=self.list[self.i], borderwidth=2, relief="groove",width=33,font=("",14,""),command=self.obj.label)
            self.btn_widgets.grid(row=self.i,column=0,pady=2)

1 Ответ

1 голос
/ 30 октября 2019

Ошибка выдается, поскольку self.workingarea не инициализирован.

Обмен вызовами на self.tools() и self.projectwindow() в функции __init__.

СОВЕТ - Не использовать 2mainloop в той же теме. Скорее используйте TopLevel widget

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...