Hello evryone :)我想在wx.Panel内绘制的蓝框中捕获click事件
我已经知道如何对按钮点击做出反应:
myButton.Bind(wx.EVT_BUTTON, myHandler)
或
myFrame.Bind(wx.EVT_BUTTON, myHandler, myFrame.myConcernedButton)
但是如果我想要怎么做呢
我想我应该为我的SquareBox创建一个新类,但是:
非常感谢。
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()
答案 0 :(得分:1)
您可能需要创建自定义小部件。维基上有一篇关于这个主题的文章:http://wiki.wxpython.org/CreatingCustomControls
查看AquaButton或PlateButton的来源,因为它们也是自定义控件。
答案 1 :(得分:0)
只需绑定到面板,然后检查事件的坐标。