wxPython:EVT_BUTTON在面板的一部分上

时间:2011-10-06 11:50:36

标签: event-handling wxpython panel

Hello evryone :)我想在wx.Panel内绘制的蓝框中捕获click事件

我已经知道如何对按钮点击做出反应:

myButton.Bind(wx.EVT_BUTTON, myHandler)

myFrame.Bind(wx.EVT_BUTTON, myHandler, myFrame.myConcernedButton)

但是如果我想要怎么做呢

  1. 在Panel上绘制一个蓝色正方形,幸运的是我已经可以管理。
  2. 仅将EVT_BUTTON捕获到蓝色方块上,而不是整个面板?
  3. 我想我应该为我的SquareBox创建一个新类,但是:

    1. 应该从哪个课程派生出来?
    2. 到目前为止,如何向该类添加事件处理?
    3. 非常感谢。

      P.S:对于这个小小的历史,我曾经用Java和Java开发。 SWING


      编辑:

      正如Mike Driscoll建议的那样,我试图用PlateButton来解决我的问题。但遗憾的是,我没有设法给按钮提供所需的尺寸和所需的样式(它在点击时会改变颜色,我不会这样)。此外,它对EVT_BUTTON事件完全没有反应。

      这是我的尝试,提前谢谢:

      import wx
      from wx.lib.platebtn import PlateButton
      
      class Square(PlateButton):
      
          def __init__(self, parent, size, pos):
              PlateButton.__init__(self, parent, size = size, pos = pos)
              self.SetBackgroundColour(wx.Colour(0,0,255))
      
      class MainFrame(wx.Frame):
      
          def __init__(self):
              wx.Frame.__init__(self, None, wx.ID_ANY, "Reactive square application",
                  size = (300,200))
              panel = wx.Panel(self, wx.ID_ANY)
              square1 = Square(panel, size=(60,60), pos=(80,50))
              square2 = Square(panel, size=(60,60), pos=(80,120))
              square1.Bind(wx.EVT_BUTTON, self.OnSquareClick)
      
          def OnSquareClick(self, event):
              dialog = wx.MessageDialog(self, "You clicked on square !!!",
                  "Hit has been done", wx.OK)
              dialog.Show(True)
      
      
      if __name__ == "__main__":
          app = wx.PySimpleApp()
          frame = MainFrame()
          frame.Show(True)
          app.MainLoop()
      

2 个答案:

答案 0 :(得分:1)

您可能需要创建自定义小部件。维基上有一篇关于这个主题的文章:http://wiki.wxpython.org/CreatingCustomControls

查看AquaButton或PlateButton的来源,因为它们也是自定义控件。

答案 1 :(得分:0)

只需绑定到面板,然后检查事件的坐标。