if не работает с self.text.GetValue()

Проверка if(после def saveus...) должна автоматически закрывать скобку, если найдёт её в self.text.GetValue(), но выдаёт NameError: name 'self' is not defined

Код:

import wx,os
OPEN=2
SAVE=3
SAVEUS=4
PRINT=5
EXIT=6
SETTINGS=7
COPY=8
PASTE=9
CUT=10
FIND=11
REPLACE=12
STATUS=13
SIZE=14
RUN=16
class MyFrame(wx.Frame):
    def __init__(self,parent,title):
        super().__init__(parent,title=title)
        self.text=wx.TextCtrl(self,style=wx.TE_MULTILINE)
        self.opfile=''
        bar=wx.MenuBar()
        filemenu=wx.Menu()
        editmenu=wx.Menu()
        viewmenu=wx.Menu()
        filemenu.Append(OPEN,'&Открыть\tCtrl+O')
        filemenu.Append(SAVE,'&Сохранить\tCtrl+S')
        filemenu.Append(SAVEUS,'С&охранить как...\tCtrl+Shift+S')
        filemenu.Append(PRINT,'&Печать\tCtrl+P')
        filemenu.Append(SETTINGS,'&Настройки')
        filemenu.AppendSeparator()
        filemenu.Append(EXIT,'&Выход')
        editmenu.Append(COPY,'&Копировать\tCtrl+C')
        editmenu.Append(PASTE,'&Вставить\tCtrl+V')
        editmenu.Append(CUT,'&Вырезать\tCtrl+X')
        editmenu.Append(FIND,'&Найти\tCtrl+F')
        editmenu.Append(REPLACE,'&Заменить\tCtrl+R')
        viewmenu.Append(STATUS,'&Статус-панель')
        viewmenu.Append(SIZE,'&Масштаб')
        bar.Append(filemenu,'&Файл')
        bar.Append(editmenu,'&Редактирование')
        bar.Append(viewmenu,'&Вид')
        runmenu=wx.Menu()
        bar.Append(runmenu,'&Запуск')
        runmenu.Append(RUN,'&Запуск без отладки\tF5')
        self.SetMenuBar(bar)
        self.Bind(wx.EVT_MENU,self.open,id=OPEN)
        self.Bind(wx.EVT_MENU,self.save,id=SAVE)
        self.Bind(wx.EVT_MENU,self.saveus,id=SAVEUS)
        self.Bind(wx.EVT_MENU,self.run,id=RUN)
    def run(self,event):
        if self.opfile=='':
            self.saveus(self)
        else:
            os.system('python -u {}'.format(self.opfile))
    def open(self,event):
        self.dirname=''
        dialog=wx.FileDialog(self,'Какой файл открыть?',self.dirname,'','*.*',wx.FD_OPEN)
        if dialog.ShowModal()==wx.ID_OK:
            self.filename=dialog.GetFilename()
            self.dirname=dialog.GetDirectory()
            self.opfile=os.path.join(self.dirname,self.filename)
            f=open(self.opfile,'r+')
            self.text.SetValue(f.read())
            self.opfile=os.path.join(self.dirname,self.filename)
            f.close()
        dialog.Destroy()
    def save(self,event):
        if self.opfile=='':
            self.saveus(self)
        else:
            z=open(self.opfile,'w')
            z.write(str(self.text.GetValue()))
            z.close()
    def saveus(self,event):
        with wx.FileDialog(self, "Куда сохранить файл?", wildcard="Любые файлы (*.*)|*.*",style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog:
            if fileDialog.ShowModal() == wx.ID_OK:
                # save the current contents in the file
                self.opfile = fileDialog.GetPath()
                with open(self.opfile, 'w') as file:
                    file.write(self.text.GetValue())
    if '(' in list(self.text.GetValue()):
        self.text.SetValue(self.text.GetValue()+')')
app=wx.App()
frame=(MyFrame(None,'PlainTextEdit'))
frame.Show()
app.MainLoop()

Ответы (1 шт):

Автор решения: CrazyElf
class MyFrame():
    # ...
    if '(' in list(self.text.GetValue()):
        self.text.SetValue(self.text.GetValue()+')')

А к чему этот кусок кода вообще у вас относится, когда он должен выполняться? Он у вас вне функций, а значит он относится к классу и выполняется в тот момент, когда питон читает описание класса. Переменная self же относится к экземплярам класса, а в этом месте ещё никаких экземпляров нет, есть только сам класс, его описание.

Где вы на самом деле хотите чтобы этот кусок кода выполнялся, в какой момент, в какой функции/методе класса? Сейчас у вас этот код висит сам по себе, вне контекста.

→ Ссылка