【问题标题】:wxPython sizer wxGridSizer's parent class method is strangely inaccessiblewxPython sizer wxGridSizer的父类方法奇怪的不可访问
【发布时间】:2009-07-18 04:53:25
【问题描述】:

我遇到了 wxPython 工具包的问题。我正在使用 wx.GridSizer 对象来放置一个显示一些状态信息的网格。我需要更新这个网格,所以我想出了几种不同的方法。我更喜欢的是简单地刷新/更新需要更新的文本,因此我可以尝试将 wxStaticText 对象从 sizer 中分离出来,用新的 wxStaticText 对象覆盖它,然后将对象重新插入到 sizer 的先前索引处。

更好的方法是使用 wxGridSizer 的父类 wxSizer,它有一个名为“Replace”的方法,它允许我替换小部件中的项目而不将其取出,然后将其重新插入。更多光滑没有?好吧,在尝试使用此方法时,我遇到了一个非常奇怪的错误。这是代码后跟错误:

    self.info_sizer.Replace(self.project_value, wx.StaticText(self, wx.ID_ANY, project))

    self.info_sizer.Replace(self.project_value, wx.StaticText(self, wx.ID_ANY, project))
AttributeError: 'GridSizer' object has no attribute 'Replace'

所以突然替换不是一个选项。请记住,我之前提到的 Insert 方法是 sizer 的父类 wxSizer 的方法。所以证明我使用的sizer wxGridSizer可以成功调用其父类的方法(继承,子类)Insert。

那么为什么我不能以类似的方式调用方法 Replace?

【问题讨论】:

    标签: wxpython oop sizer


    【解决方案1】:

    您不能使用wx.StaticText.SetLabel("New label") 更新文本的任何原因?

    【讨论】:

    • 我以为我已经查看了该课程以寻求解决方案。我一定错过了那个方法。我最近对此感到超负荷。好的,谢谢!
    • 这是一个很好的解决方案,但如果知道我无法访问父类方法仍然会很高兴.. 我可以使用一个,但不能使用另一个。神秘,除非我做的事情很明显是错误的,否则对我来说已经很晚了。
    • 你是 wx.GridSizer 的子类吗? wxpython.org/docs/api/wx.Sizer-class.html 中有这样的评论说:“如果你想在 wxPython 中创建一个自定义的 sizer 类,你应该从 wx.PySizer 派生该类,以便为各种虚拟方法获得 Python 感知能力。”
    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多