Почему я не могу получить доступ к переменной в моем классе. питон
Я создал панель в своем основном классе. Затем я хотел создать кнопку, которая идет в панель. Я создал отдельный класс для кнопки с названием panel_in_button и установил main в ее параметрах в надежде, что смогу унаследовать панель в своем основном классе, а затем использовать ее в своем классе panel_in_button, но по какой-то странной причине моя кнопка не будет отображаться, когда я запустить программу. Программа работает нормально, за исключением этого. Помогите, пожалуйста. Вот ошибка, которую я получаю, но я не думаю, что это связано с тем, почему я не могу получить доступ к панели.
Предупреждение (из модуля предупреждений): Файл "C:\Python27\GUI practice.py", строка 19 app=wx.PySimpleApp() # Это запускает программу wxPyDeprecationWarning: Использование устаревшего класса PySimpleApp.
import wx
class main(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, "My window", size=(300, 200))
panel=wx.Panel(self)
class panel_in_button(main):
def __init__(self):
button = wx.Button(main.panel, label="exit",pos=(130,10), size=(60, 60))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
self.Bind(wx.EVT_CLOSE, self.closewindow)
def closebutton(self, event):
self.Close(True)
def closewindow(self, event):
self.Destroy()
if __name__=="__main__":
app=wx.PySimpleApp() #This runs the program
frame=main(parent=None, id=-1)#Displays the program
frame.Show()
app.MainLoop()
1 ответ
Вы не можете написать код таким образом. main - это класс, а не экземпляр класса. Вы не должны вызывать метод класса напрямую. Вместо этого вам нужно создать его экземпляр, а затем вызвать метод вашего объекта. Нет, где в этом коде вы создаете экземпляр panel_in_button. Во всяком случае, я не рекомендую программировать таким образом. Вот очищенная версия:
import wx
class main(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, "My window", size=(300, 200))
panel=wx.Panel(self)
button = wx.Button(panel, label="exit",pos=(130,10), size=(60, 60))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
self.Bind(wx.EVT_CLOSE, self.closewindow)
def closebutton(self, event):
self.Close(True)
def closewindow(self, event):
self.Destroy()
if __name__=="__main__":
app=wx.App(False) #This runs the program
frame=main(parent=None, id=-1)#Displays the program
frame.Show()
app.MainLoop()
Это объединяет два класса в один. Я также заменил ссылку на wx.PySimpleApp, поскольку это устарело. Я бы порекомендовал вам взглянуть на размеры вместо абсолютного позиционирования. Сайзеры определенно стоят усилий, чтобы учиться.