1

好的,所以我几乎完成了我的项目程序,但我无法让 BUTTON_EVT 工作,如果我老实说这应该是最简单的事情。我的程序上有代表硬件的按钮,我创建了一个 def 函数,让它们出现在 OGL 画布上。

  • 问题已解决...与问题相关的代码在下面的答案中找到
4

2 回答 2

2

Edited from your last comment. Use this (using your own images):

def OnClickRouter(self, event):
    image=wx.Image('cat.jpg', wx.BITMAP_TYPE_JPEG)
    self.frame = bucky(None, image)
    self.frame.Show()

If you call bucky() this way you must also fix the class signature:

class bucky(wx.Frame):      
  # Creating the outer window/frame
  def __init__(self, parent, image=None):
    wx.Frame.__init__(self, parent, -1,'Karls Network Tool', size=(900,700))

    my_image = image if image else wx.Image("myself.bmp", wx.BITMAP_TYPE_BMP) 

    ''''''''''''''''''''''''''''''''
    # Button images
    buttonOneRouter = my_image.ConvertToBitmap()
    self.buttonOneRouter = wx.BitmapButton(panel, -1, buttonOneRouter, pos=(20,340))
    self.buttonOneRouter.Bind(wx.EVT_BUTTON, self.OnClickRouter)
    ''''''''''''''''''''''''''''''''

Then you can see that after clicking the buttonOnerouter what actually you are doing is opening a new frame. The left figure is what I get when I run the program, the right one is after I click and enter again my name (I simplified a bit your code. Thats why you only see one button at the bottom instead of 4):

enter image description here

If you want to put my cat in the canvas instead of in the button there is still some work to do. I recommend to you to give a look at the wxPython demo. In the miscellaneous group of examples you have one called OGL that shows how to do that.

Edit: You can download the wxPython docs and demos package from here

于 2012-04-10T17:00:59.030 回答
1

我不知道这是否正确,但我建议您采用这种方法,看看它是否有效。

将您的框架类修改为:

def __init(self,parent,id,img=None)

def onClickRouter(self,event):
    image=wx.Image('router.jpg', wx.BITMAP_TYPE_JPEG)
    temp = image.ConvertToBitmap()
    self.bmp = wx.StaticBitmap(parent=self, bitmap=temp)
    self.frame=bucky(self.bmp)

请告知结果。

于 2012-04-10T17:36:35.570 回答