我可以在派生类中使用 wxPython 的 wx.ItemContainer 吗?

2024-09-28 05:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个新的wx.选择-比如控制(实际上是wx.选择)它使用wx.ItemContainer管理项目列表。下面是一个显示错误的最小示例:

import wx
class c(wx.ItemContainer):
    def __init__(my): pass

x = c()
x.Clear()

此操作失败的原因是:

^{pr2}$

使用ItemContainer的其他控件似乎是wxWindows的内部控件,因此我可能无法以这种方式使用它。不过,这肯定会很方便。在

你知道我做错了什么吗?在


Tags: 项目import示例列表initmydef错误
2条回答

在wx.ItemContainer不能直接实例化,例如try

x = wx.ItemContainer()

它抛出错误

^{pr2}$

原因是它是一种接口类型(如果我们可以在python中调用它),并且不能在它上调用__init__,而是将其用作第二个基并重写您使用的方法,例如

class C(wx.PyControl, wx.ItemContainer): 
    def __init__(self, *args, **kwargs):
        wx.PyControl.__init__(self, *args, **kwargs)

    def Clear(self):
        pass

app = wx.PySimpleApp()

frame = wx.Frame(None,title="ItemContainer Test")
x = C(frame)
x.Clear()

frame.Show()
app.SetTopWindow(frame)
app.MainLoop()

你的怀疑是对的。你不能对WxWistGes的任何类型进行子类,因为它们在C++域中,并且只是名义上用Python包。相反,您需要一个Py*类,您可以将其子类化。解释在this Wiki entry on writing custom controls中给出。在

对于ItemContainer,似乎没有这样的包装器,而且ItemContainer被用作多重继承模式中的父级,这一事实甚至可能使问题复杂化。在

我怀疑从WxPython内部,可能不可能替换ItemContainer,如果你需要它,它必须在C++级别上集成。在

相关问题 更多 >

    热门问题