wxpython关闭窗口事件_wxpython窗口在事件处理后崩溃

这段代码读取图片并将其作为窗口的背景。

有两个问题我无法解释:导入图片后,单击右上角的红色“X”不会关闭窗口。

如果试图拖动图像,程序将崩溃。

为什么会这样?

谢谢你import wx

import wx.lib.buttons as buttons

class Main(wx.Frame):

def __init__(self, parent, title):

wx.Frame.__init__(self, parent, id=-1, title=title, size=(300, 300))

self.initUI()

self.panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, size=(10000, 10000))

self.backGroundImage=''

self.Layout()

def initUI(self):

menubar = wx.MenuBar()

fileMenu = wx.Menu()

fileMenu.AppendSeparator()

imp = wx.Menu()

importBackgroundButton = imp.Append(wx.ID_ANY, 'Import background')

self.Bind(wx.EVT_MENU, self.OnImportBackground, importBackgroundButton)

fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)

menubar.Append(fileMenu, '&File')

self.SetMenuBar(menubar)

self.SetTitle('test')

self.Centre()

self.Show(True)

#load background

def OnImportBackground(self, e):

app = wx.App(None)

style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST

dialog = wx.FileDialog(None, 'Open', wildcard='*.png', style=style)

if dialog.ShowModal() == wx.ID_OK:

path = dialog.GetPath()

else:

path = None

dialog.Destroy()

self.backgroundImage = ButtonImage(self, self.panel, path, (0, 0))

W = self.backgroundImage.bmp.GetSize()[0]

H = self.backgroundImage.bmp.GetSize()[1]

self.SetSize((W+16, H+58))

self.Refresh()

#crash

class ButtonImage():

def __init__(self, parent, panel, nameImage, pos):

self.panel = panel

self.bmp = wx.Bitmap(nameImage, wx.BITMAP_TYPE_ANY)

self.maxPiecePositionX = self.panel.GetSize()[0] - self.bmp.GetSize()[0]

self.maxPiecePositionY = self.panel.GetSize()[1] - self.bmp.GetSize()[1]

self.bmapBtn = wx.BitmapButton(self.panel, id=wx.ID_ANY, bitmap=self.bmp, style=wx.NO_BORDER, pos=pos)

self.bmapBtn.Bind(wx.EVT_LEFT_DOWN, self.OnClickDown, self.bmapBtn)

self.bmapBtn.Bind(wx.EVT_LEFT_UP, self.OnClickUp, self.bmapBtn)

self.bmapBtn.Bind(wx.EVT_MOTION, self.MoveButton, self.bmapBtn)

self.hold = 0

self.holdPosition = (0, 0)

def EnterButton(self, event):

pass

def LeaveButton(self, event):

self.hold = 0

def OnClickDown(self, event):

obj = event.GetEventObject()

self.hold = 1

self.holdPosition = (event.GetX(), event.GetY())

def OnClickUp(self, event):

self.hold = 0

def MoveButton(self, event):

deltaX, deltaY = 0, 0

if self.hold:

deltaX = event.GetPosition()[0] - self.holdPosition[0]

deltaY = event.GetPosition()[1] - self.holdPosition[1]

newPositionX = self.bmapBtn.GetPosition()[0] + deltaX

newPositionY = self.bmapBtn.GetPosition()[1] + deltaY

if (0 < newPositionX < self.maxPiecePositionX) and (0 < newPositionY < self.maxPiecePositionY):

self.bmapBtn.SetPosition((newPositionX, newPositionY))

else:

self.holdPosition = self.holdPosition[0] + deltaX, self.holdPosition[1] + deltaY

self.bmapBtn.Raise()

self.bmapBtn.Refresh()

app = wx.App()

frame = Main(None, "Test")

frame.Show()

app.MainLoop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值