Button wxPython-位图按钮赢得´;不可毁灭
我对位图按钮有问题,我想对它进行编辑,但在我点击wbtn后它仍然显示,它只是打印出来。以下是代码:Button wxPython-位图按钮赢得´;不可毁灭,button,bitmap,wxpython,destroy,Button,Bitmap,Wxpython,Destroy,我对位图按钮有问题,我想对它进行编辑,但在我点击wbtn后它仍然显示,它只是打印出来。以下是代码: 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.Cent
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()
我认为我的销毁代码没有错,所以我真的不知道为什么当我点击wbtn时,它仍然显示按钮和打印命令。请救人 根据我对您问题的理解,当您单击
wbtn
时,您希望销毁/删除self.wstdwnbtn
我的方法是在wbtn
上创建self.wstdwnbtn
。这可以通过以下行完成:
self.wstdwnbtn = wx.StaticBitmap(self.wbtn, -1, self.shutdownbtn)
因为在你的代码里
self.wstdwnbtn=wx.StaticBitmap(self.wbtn,-1,self.shutdownbtn)
不能单击self.wstdwnbtn
。在您的案例中,单击self.wstdwnbtn不会生成“退出”。但是我的朋友我也解决了这个问题
我在你的代码中发现了另一个逻辑问题。您正在使用显示的变量self.shutdown\u来确定何时销毁self.wstdwnbtn
。您当前的逻辑如下:
如果显示的self.shutdown\u
为真,则销毁self.wstdwnbtn
并将显示的self.shutdown\u设置为假
如果显示的self.shutdown\u
为False,则再次创建
self.wstdwnbtn
并设置显示的self.shutdown\u
=True
因此,最初显示的self.shutdown\u
=False,因此您只需创建self.wstdwnbtn
。然后您将self.shutdown\u设置为True。因此,下次单击self.wbtn
时,将调用wstart()
。现在,由于显示的self.shutdown\u
=True,因此根据您的逻辑,它将销毁self.wstdwnbtn
,并将显示的self.shutdown\u设置为False。在下一行中,如果不是self.wstdwnbtn,则显示:
,因此,self.shutdown\u显示
=False,您将立即再次创建一个self.wstdwnbtn
,因此您永远不会看到self.wstdwnbtn
被销毁
解决方案:
我想你是想用这句话。我已经修复了所有这些问题的代码。现在您将看到如何销毁并再次创建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()
我希望这会有帮助。非常感谢您的回答,这对我帮助很大。如果代码就是这样,它就可以工作,但我有更多导入位图的代码,如果我在那里给出代码并单击wbtn,我就看不到wstdwnbtn,但如果我第二次单击它,它就会打印出来。所以wstdwnbtn在那里,但我看不到。我已经回答了您的这个特殊问题。如果您仍有疑问,请提出新问题或使用正确的代码和详细信息编辑当前问题。否则就不可能知道你的问题是什么?