首页 > 解决方案 > wx.xml.XmlResource.Get().LoadPanel:不起作用

问题描述

在现有实例上加载 XRC wx.Panel 不起作用。
尽管尝试显示它是空的,但没有报告错误。

错误的方法:

import wx
import wx.xrc

class SomePanelViewModel(wx.Panel):
    def __init__(self, parent):
        super().__init__()
        xmlResource = wx.xrc.XmlResource('SomePanelView.xrc')
        xmlResource.LoadPanel(panel=self, parent=parent, name='SomePanelView')

XRC 文件是有效的,因为其他方法LoadPanel没有问题。
因此面板已填充且可见。

工作方法:

xmlResource = wx.xrc.XmlResource('SomePanelView.xrc')
panel = xmlResource.LoadPanel(parent=parent, name='SomePanelView')

还值得一提的是,这两种方法都适用于 wx.Dialog 没有问题。

我还尝试在损坏的面板上运行诸如“显示”之类的方法。不幸的是没有任何效果。

我感到震惊和困惑。以前有人处理过吗?有什么建议么?解决方案?

标签: python-3.xwxpython

解决方案


所以最后我要回答我自己的问题。xD

这个问题看起来像一个库错误。

因此我决定做一个解决方法:

class XrcPanelView(wx.Panel):

    def __init__(self, parent):
        super().__init__(parent=parent)

        xrcFilePath = 'path/to/your.xrc'
        xmlResource = wx.xrc.XmlResource(xrcFilePath)
        self._xrcPanel = xmlResource.LoadPanel(parent=self, name='ViewName')

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self._xrcPanel, 1, wx.EXPAND | wx.ALL, 0)

这样您就可以继承一个面板并在其上应用您的 XRC 面板。
这不是一个完美的解决方案。
虽然它达到了我的目的。
我需要在一个视图类中封装一些额外的初始化步骤。

希望有人会喜欢。;)


推荐阅读