wx Python子类Dialog

时间:2016-04-07 07:53:03

标签: python wxpython subclass

我有一个包含以下内容的源文件:

 class Dialog1 ( wx.Dialog ):

    def __init__( self, parent ):

        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Hello", pos = wx.DefaultPosition, size = wx.Size( 342,253 ), style = wx.DEFAULT_DIALOG_STYLE )

我试图在另一个源文件中实例化它,如下所示:

dlg = Dialog1(wx.Dialog).__init__(self, None)

但是,我收到以下错误:

Traceback (most recent call last):
File "scripts\motors\motors.py", line 281, in onListOption
dlg = Dialog1(wx.Dialog).__init__(self, None)
File "...",
line 21, in __init__
    wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Hello", pos = wx.DefaultPosition, size = wx.Size( 342,253 ), style = wx.DEFAULT_DIALOG_STYLE )
  File "c:\Python27\lib\site-packages\wx-3.0-msw\wx\_windows.py", line 734, in __init__
_windows_.Dialog_swiginit(self,_windows_.new_Dialog(*args, **kwargs))
TypeError: in method 'new_Dialog', expected argument 1 of type 'wxWindow *'

知道为什么会这样吗?我试过将wx.Window传递给Dialog init,但它并没有什么区别。不能解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

dlg = Dialog1(parent_window)

是要走的路。其中parent_window将成为对话框的父级。请参阅classes in Python

从链接引用:

  

当一个类定义 init ()方法时,类实例化   自动为新创建的类实例调用 init ()。

这是一个有效的最小代码段:

import wx

class Dialog1 ( wx.Dialog ):
    def __init__( self, parent ):
        wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Hello",
            pos = wx.DefaultPosition, size = wx.Size( 342,253 ),
            style = wx.DEFAULT_DIALOG_STYLE )

app = wx.App()
dlg = Dialog1(None)
dlg.Show()
app.MainLoop()

答案 1 :(得分:0)