错误:wxWindow :: SetLayoutDirection():必须在创建窗口后设置布局方向

时间:2016-08-11 07:12:06

标签: python wxpython

我有一个函数(WxPython 2.8.12& Python 2.7),它在递归中创建组合:

    self.resultsCtrl = wx.combo.ComboCtrl(self,-1)
    self.results = ListBoxCombo(self.resultsCtrl)

根据需要创建尽可能多的内容。

class ListBoxCombo(wx.ListBox, wx.combo.ComboPopup):
    def __init__(self, comboCtrl, choices=None, readonly=True):  
        self.PostCreate(wx.PreListBox())
        wx.combo.ComboPopup.__init__(self)
        comboCtrl.SetPopupControl(self)
        self.SetLayoutDirection(comboCtrl.GetLayoutDirection())

有时我会收到此错误:

  

wx._core.PyAssertionError:C ++断言" hwnd"失败了   wxWindow :: SetLayoutDirection()中的.... \ src \ msw \ window.cpp(1084):   必须在创建窗口后设置布局方向

仅在Windows上发生这种情况。 我不明白为什么它认为布局是在窗口之前设置的,为什么有时它会起作用,有时候不行。 请帮忙。

1 个答案:

答案 0 :(得分:0)

当您使用两阶段创建(与上面的wx.PreListBox一样)时,还没有UI对象,只是对象的C ++部分。在MSW Windows术语中,还没有窗口句柄,a.k.a HWND。直到课程'才创建UI对象。调用Create方法。因此,当没有本机UI对象时,需要对其进行操作的方法将失败。

PostCreate方法是一个仅支持Python的助手,只调整Python类中的一些东西,它也不会调用Create方法。在调用wx.ListBox.Create之前,您应该延迟调用直接处理本机窗口小部件的任何内容。