0
我創建了一個可點擊的圖像(文本+位圖)窗口小部件類作爲wx.PyControl
的子類。我想綁定雙擊這個小部件上的任何地方(文本,位圖,背景)到某個動作(在這裏稱爲OnClick
)。從wx.PyControl的任意位置綁定雙擊
不幸的是,它不起作用:使用此代碼,當我點擊MyBitmapButton
小部件的位圖或文本部分時,不會調用OnClick
。 (見下面的問題)。
import wx
class MyBitmapButton(wx.PyControl):
def __init__(self, parent, id=-1, bmp=None, label='blah', pos = wx.DefaultPosition, size=(166,220),
style = 0, validator = wx.DefaultValidator,
name = "mybitmapbutton"):
style |= wx.BORDER_NONE
wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name)
myimg = wx.StaticBitmap(self, -1, bmp, pos=(8,8), size=(150,150))
mytxt = wx.StaticText(self, -1, label, (6,165))
class MainFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size=(800,600))
sizer = wx.WrapSizer()
img = wx.Image('background.png', wx.BITMAP_TYPE_PNG)
bmp = wx.BitmapFromImage(img)
btn = MyBitmapButton(self, -1, bmp, label='a')
sizer.Add(btn, 0, wx.ALL, 10)
self.Sizer = wx.BoxSizer(wx.VERTICAL)
self.Sizer.Add(sizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 8)
self.Show()
# ################
# Why don't these bindings detect double-click anywhere on the widget ?
btn.Bind(wx.EVT_LEFT_DCLICK, self.OnClick)
self.Bind(wx.EVT_LEFT_DCLICK, self.OnClick, btn)
def OnClick(self, event):
print 'Clicked'
app = wx.App(0)
frame = MainFrame(None, 'Test')
app.MainLoop()
如何綁定雙擊按鈕以OnClick
地方?
謝謝@VZ。你是否有一個示例代碼添加到'MyBitmapButton'內部,以便綁定子控件的雙擊,以便我可以在'MainFrame'的'__init__'中做一個唯一的綁定? – Basj
如何讓我可以在'MainFrame'中做綁定? (因爲'class MyBitmapButton(wx.PyControl)'是一個泛型類,我不能在'MyBitmapButton'的定義中做每個特定的綁定...) – Basj
不,對不起,我沒有任何示例Python代碼。但它應該很簡單:在MyBitmapButton中提供你自己的'BindToDClick(func)',並從它調用'self.Bind(func)','myimg.Bind(func)'和'mytext.Bind(func)' 。 –