2016-04-18 1 views
0

Я делаю некоторые впечатления в Python, особенно в wxpython от EventGhost, но у меня есть вообще проблема с классами. Я наблюдал вокруг и много пробовал, но не имел успеха.Атрибут родительского класса вызова Python

Моя проблема заключается в том, что я хочу, чтобы закрыть мой Gui от кнопки внутри моего «MyDialog()» класса:

class ShowInputDialog(eg.ActionBase): 
    name = "Show Input Dialog" 
    description = "Show an input dialog that allows you to create an EventGhost event that you can then use to trigger AutoRemote messages or notifications" 
    def __call__(self): 
     class MyDialog(): 
      def __init__(self): 

       ########################Main Dialog########################### 
       no_sys_menu = wx.CLIP_CHILDREN | wx.STAY_ON_TOP | wx.FRAME_NO_TASKBAR | wx.NO_BORDER | wx.FRAME_SHAPED 
       self.Dialog = wx.Frame(None, wx.ID_ANY, "Hello World", style=no_sys_menu, size=(400,600)) 

       ########################Header########################### 
       Header = wx.Panel(self.Dialog, wx.ID_ANY, size=(400,600)) 
       HeaderSizer = wx.GridSizer(rows=1, cols=2, hgap=5, vgap=5) 

       HeaderSizer.Add(wx.StaticText(Header, label="Hello World"), flag=wx.ALIGN_CENTER_VERTICAL) 

       button = wx.Button(Header, label='close') 
       button.Bind(wx.EVT_BUTTON, self.close) 
       HeaderSizer.Add(button, 0, wx.ALIGN_RIGHT, 0) 

       Header.SetSizer(HeaderSizer) 

       upDownSizer = wx.BoxSizer(wx.VERTICAL) 
       upDownSizer.Add(Header, 0, flag=wx.EXPAND)    
       self.Dialog.SetSizer(upDownSizer) 

       self.Dialog.Fit() 
       self.Dialog.Show() 


      def close(self, event): 
       self.Close() 
       print "see you soon" 

     wx.CallAfter(MyDialog) 

, если я называю «близко» от моей кнопки я получаю

AttributeError: MyDialog instance has no attribute 'Close' 

но как позвонить "Закрыть"? Я прочитал о супер инициализации «MyDialog», но не добился успеха, и не знаю, устранит ли это мою проблему.

Спасибо и не так трудно нуб

ответ

1

самость свой собственный класс, это не WX класс ... если вы хотите иметь атрибуты wx.Dialog вы должны наследовать от wx.Dialog

самое простое решение, вероятно, просто уравнять близко от self.Dialog, который, как представляется, фактическая экземпляр диалогового

def close(self, event): 
    self.Dialog.Close() 
    print "see you soon" 
+0

I Habe пытался что прежде, но получить что-то вроде AttributeError: MyDialog Methode не имеет экземпляра 'Dialog' – fteinz

+0

нет, это не ошибка, которую вы получили ... если вам нужна помощь, вам нужно будет поставить фактическое сообщение об ошибке, которое вы получите ... –

+0

Извините за то, что меня не было дома. И Жаль, что ты прав. Я тестировал, как вы это делали (я думал, что попробую это раньше), и теперь он работает, чем мысли. благодаря – fteinz