【问题标题】:how to delete or destroy the wx.panel from its parent (another wx.panel object)?如何从其父级(另一个 wx.panel 对象)中删除或销毁 wx.panel?
【发布时间】:2010-10-15 14:12:29
【问题描述】:

我正在使用 wxPython 开发一个 GUI。我在另一个正方形(也带有 wxPanel 类)内绘制了一个代表 CD 对象的正方形,它代表 CD 容器对象。 我想在CDWindow的右键菜单中有“删除这张CD”,这将删除CDwindow。 基本上,我的代码是这样的(为简单起见,我保留了主要部分):

class CDContainerWindow(wx.Panel):    
   def __init__(self):
       wx.Panel.__init__(self, parent, id, pos, size)  
       cd_win=CDWindow()

class CDWindow(wx.Panel):  
   def __init__(self):
      wx.Panel.__init__(self, parent, id, pos, size)
      self.Bind(wx.EVT_MENU, self.OnDeleteCD, item_CD)

   def OnDeleteCD(self, event):
      self.destroy()

有错误消息“分段错误” 我的方式有什么问题?如何从 CDContainer 窗口中删除此 CD 窗口?

【问题讨论】:

  • 您的代码格式搞砸了,显然不完整,请修复并使用“代码”按钮
  • 你的代码没有任何意义,你为什么不粘贴真实的代码,选择它并按下code sample按钮

标签: python user-interface wxpython wxwidgets


【解决方案1】:

也许有一个sizer仍在使用被破坏的面板?您应该先从尺寸测量仪中移除面板。

【讨论】:

  • 嗨,乔里尔,谢谢你的回答。我没有使用任何sizer。我只是将 cdwindow 作为变量包含在内。我不知道是否可以要求一个对象销毁自己。
  • 我明白了.. segfault 是在销毁时立即发生还是在退出 OnDeleteCD 时发生?
  • 嗨,乔里尔,再次感谢您的跟进。我非常感谢这个巨大的帮助。它发生在我调用 self.Destroy() 的时候。只是一件事,在这个 CDWindow 类的 OnPaint 函数中,我使用 DC 绘制了一些圆形、正方形和文本。而当我调用 OnDeleteCD 时,我只调用了 self.Destroy()。另外,我在self.Destroy()之前和之后都放了print("test"),两者都可以输出到控制台,然后有segfault消息。这有点奇怪。因为通常python会给我足够的信息来说明问题出在哪里。但是这一次,我只得到这个段错误,没有别的。
  • 我会尝试调用 wx.CallAfter(self.Destroy) 而不是 self.Destroy()...如果它仍然存在段错误,请发布一个可运行的示例 :)
  • 好吧,我的假设是 wxPython 在当前事件处理程序期间仍在尝试访问被破坏的面板,并且没想到它会消失.. wx.CallAfter 确保您作为参数传递的函数在当前事件处理程序完成其工作后被调用 :)
猜你喜欢
  • 2014-02-20
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2013-09-11
  • 2010-11-05
  • 2017-06-29
相关资源
最近更新 更多