wxPython 检查对象是不是存在
Posted
技术标签:
【中文标题】wxPython 检查对象是不是存在【英文标题】:wxPython check if object existswxPython 检查对象是否存在 【发布时间】:2014-05-10 20:29:23 【问题描述】:我想检查位图按钮是否存在,如果存在,则销毁它,如果不存在,则创建它。这是代码:
try:
shutdownbtn
except NameError:
sbex = False
else:
sbex = True
if sbex:
self.shutdownbtn.Destroy()
print "Destroyed"
if not sbex:
self.shutdownbtn = wx.Bitmap("bin/Images/wstdwn.png")
self.wstdwnbtn = wx.StaticBitmap(self, -1, self.shutdownbtn)
self.wstdwnbtn.SetPosition((0, 550))
self.wstdwnbtn.Bind(wx.EVT_LEFT_DOWN, self.wexit)
self.wstdwnbtn.SetToolTip(wx.ToolTip("Exit to main menu."))
它会创建位图按钮,但不会删除它!为什么?我真的不知道。
【问题讨论】:
【参考方案1】:这是因为您使用的是shutdownbtn
而不是self.shutdownbtn
。您还必须捕获AttributeError
,而不是NameError
。
【讨论】:
非常感谢它有效。我有它喜欢其他按钮的动作,所以如果我第一次点击它会显示shutdownbtn,但如果我第二次点击它,它会打印Destroyed,但shutdownbtn没有被破坏,如果我第三次点击它打印致命的 Python 错误:(pygame parachute) Segmentation Fault 啊,那是因为你删除了按钮,但self.shutdownbtn
仍然存在。最好保留self.shutdown_showing
之类的属性来跟踪按钮是显示还是隐藏,而不是使用该属性的存在。【参考方案2】:
你的意思是这样的:
try:
self.shutdown_showing
except AttributeError:
self.shutdown_showing = False
else:
self.shutdown_showing = True
if self.shutdown_showing:
self.shutdownbtn.Destroy()
print "Destroyed"
if not self.shutdown_showing:
self.shutdownbtn = wx.Bitmap("bin/Images/wstdwn.png")
self.wstdwnbtn = wx.StaticBitmap(self, -1, self.shutdownbtn)
self.wstdwnbtn.SetPosition((0, 550))
self.wstdwnbtn.Bind(wx.EVT_LEFT_DOWN, self.wexit)
self.wstdwnbtn.SetToolTip(wx.ToolTip("Exit to main menu."))
因为还是一样...
【讨论】:
否 - 有同样的问题。在类的 init 方法中,您应该将 shutdown_showing 设置为 False,然后在显示/隐藏按钮时更改值 要理解为什么,想想第三次调用函数时会发生什么,当属性存在并设置为True,但第二次调用时关闭按钮已被破坏。跨度> 哦,是的,非常感谢它的工作!但是我的销毁代码可能是错误的,因为它打印了销毁,但位图按钮仍然存在。你能帮帮我吗?以上是关于wxPython 检查对象是不是存在的主要内容,如果未能解决你的问题,请参考以下文章