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 же относится к экземплярам класса, а в этом месте ещё никаких экземпляров нет, есть только сам класс, его описание.
Где вы на самом деле хотите чтобы этот кусок кода выполнялся, в какой момент, в какой функции/методе класса? Сейчас у вас этот код висит сам по себе, вне контекста.