Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从其父对象(另一个wx.panel对象)中删除或销毁wx.panel?_Python_User Interface_Wxpython_Wxwidgets - Fatal编程技术网

Python 如何从其父对象(另一个wx.panel对象)中删除或销毁wx.panel?

Python 如何从其父对象(另一个wx.panel对象)中删除或销毁wx.panel?,python,user-interface,wxpython,wxwidgets,Python,User Interface,Wxpython,Wxwidgets,我正在用wxPython开发一个GUI。我画了一个代表CD对象的正方形,在另一个代表CD容器对象的正方形内(同样使用wxPanel类)。 我想在CDWindow的右键单击菜单中选择“删除此CD”,这将删除CDWindow。 基本上,我的代码是这样的(为了简单起见,我保留了主要部分): 出现错误消息“分段错误” 我的方式怎么了?如何从CDContainer窗口中删除此CD窗口?可能有一个sizer仍在使用已销毁的面板?您应该先从sizer上取下面板。您的代码格式错误且明显不完整,请修复并使用“代码

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

出现错误消息“分段错误”
我的方式怎么了?如何从CDContainer窗口中删除此CD窗口?

可能有一个sizer仍在使用已销毁的面板?您应该先从sizer上取下面板。

您的代码格式错误且明显不完整,请修复并使用“代码”按钮您的代码没有任何意义,为什么不粘贴真实代码,选择它并按
代码示例
buttonHI,Joril,谢谢您的回答。我没有用任何浆纱机。我只是将cdwindow作为变量包括在内。我不知道是否有可能要求一个物体毁灭它自己。我明白了。。SEGFULT是在销毁时立即发生,还是在退出OnDeleteCD时立即发生?嗨,Joril,再次感谢您的跟进。我真的很感谢你的帮助。这正是我调用self.Destroy()时发生的。只有一件事,在这个CDWindow类的OnPaint函数中,我使用DC绘制一些圆、正方形和文本。当我调用OnDeleteCD时,我只调用了self.Destroy()。此外,我在self.Destroy()前后放置了print(“test”),两者都可以输出到控制台,然后出现segfault消息。这有点古怪。因为python通常会给我足够的信息来说明问题所在。但是这一次,我只得到了这个segfault,没有别的。我会尝试调用wx.CallAfter(self.Destroy)而不是self.Destroy()。。。如果仍然存在SEGFULTS,请发布一个可运行的示例:)我的假设是wxPython在当前事件处理程序期间仍在尝试访问已销毁的面板,并且不希望它消失。。wx.CallAfter确保在当前事件处理程序完成其作业后调用作为参数传递的函数:)
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()