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 检查对象是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

从 wxPython MenuBar 中删除菜单

Firebase 存储安全规则:检查是不是存在另一个对象/检查对象的元数据

python GUI编程(Tkinter)

检查 JavaScript 对象中是不是存在键?

检查对象是不是已经存在?

检查对象中是不是存在键[重复]