我有位图按钮的问题,我想要它,但它仍然显示我点击wbtn后,它只是打印Destroyed。这是代码:
import wx
class GameFrame(wx.Frame):
def __init__(self,parent,id):
self.shutdown_showing = False
wx.Frame.__init__(self, parent, id, "Project - Map", size=(860, 640))
wx.Frame.CenterOnScreen(self)
self.SetBackgroundColour("green")
self.wndwsbtn = wx.Bitmap("Images/wlogo.png")
self.wbtn = wx.StaticBitmap(self, -1, self.wndwsbtn)
self.wbtn.SetPosition((2, 585))
self.wbtn.Bind(wx.EVT_LEFT_DOWN, self.wstart)
self.wbtn.SetToolTip(wx.ToolTip("Start"))
def wstart(self, event):
if self.shutdown_showing:
self.shutdownbtn.Destroy()
self.Layout()
print "Destroyed"
self.shutdown_showing = False
if not self.shutdown_showing:
self.shutdownbtn = wx.Bitmap("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."))
self.shutdown_showing = True
def wexit(self, event):
print "Exit"
if __name__=='__main__':
app=wx.App(redirect=False)
frame=GameFrame(parent=None,id=-1)
frame.Show()
app.MainLoop()
我认为我的破坏代码没有错,所以我真的不知道为什么它仍然显示按钮并打印Deystroyed如果我点击wbtn。请帮助别人!
答案 0 :(得分:0)
根据我对您的问题的理解,您希望在点击self.wstdwnbtn
时销毁/删除wbtn
。
我的方法是在self.wstdwnbtn
上创建wbtn
。这可以通过以下行完成:
self.wstdwnbtn = wx.StaticBitmap(self.wbtn, -1, self.shutdownbtn)
因为在你的代码中
self.wstdwnbtn = wx.StaticBitmap(self.wbtn, -1, self.shutdownbtn)
您无法点击self.wstdwnbtn
。点击self.wstdwnbtn
并未生成'退出'在你的情况下。但我也解决了这个问题。
此外,我在您的代码中发现了另一个逻辑问题。您正在使用变量self.shutdown_showing
来确定何时销毁self.wstdwnbtn
。您当前的逻辑如下:
如果
self.shutdown_showing
为True,则销毁self.wstdwnbtn
并设置self.shutdown_showing
= False如果
self.shutdown_showing
为假,那么您将再次创建一个self.wstdwnbtn
并设置self.shutdown_showing
= True
因此,最初self.shutdown_showing
= False,因此您只需创建self.wstdwnbtn
。然后你设置self.shutdown_showing
= True。因此,下次点击self.wbtn
时会调用wstart()
。现在self.shutdown_showing
= True,所以由于你的逻辑,它会破坏self.wstdwnbtn
并设置self.shutdown_showing
= False。在下一行,您有if not self.shutdown_showing:
,因此self.shutdown_showing
= False,您会立即再次创建self.wstdwnbtn
,因此您永远不会看到self.wstdwnbtn
被销毁。
<强>解决方案强>:
我认为您想使用if-Else声明。我修复了所有这些问题的代码。现在,您将看到self.wstdwnbtn
如何被销毁并再次创建。
import wx
class GameFrame(wx.Frame):
def __init__(self,parent,id):
self.shutdown_showing = False
wx.Frame.__init__(self, parent, id, "Project - Map", size=(860, 640))
wx.Frame.CenterOnScreen(self)
self.SetBackgroundColour("green")
self.wndwsbtn = wx.Bitmap("Your Image")
self.wbtn = wx.StaticBitmap(self, -1, self.wndwsbtn)
self.wbtn.SetPosition((2, 585))
self.wbtn.Bind(wx.EVT_LEFT_DOWN, self.wstart)
self.wbtn.SetToolTip(wx.ToolTip("Start"))
def wstart(self, event):
if self.shutdown_showing:
self.wstdwnbtn.Destroy()# Destroy self.wstdwnbtn
self.Layout()
print "Destroyed"
self.shutdown_showing = False
# if not self.shutdown_showing: This was wrong.
else:
self.shutdownbtn = wx.Bitmap("Your image")
# Create self.wstdwnbtn on self.wbtn instead.
self.wstdwnbtn = wx.StaticBitmap(self.wbtn, -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."))
self.shutdown_showing = True
def wexit(self, event):
print "Exit"
if __name__=='__main__':
app=wx.App(redirect=False)
frame=GameFrame(parent=None,id=-1)
frame.Show()
app.MainLoop()
我希望它有所帮助。