2017-04-20 121 views
0

我試圖用wxpython檢測位圖上的clic。 on_click過程似乎運行時沒有clic,並且在單擊時不運行。 我做錯了什麼?wxPython:檢測鼠標點擊位圖

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# 

import os 
import wx 
import wx.lib.agw.thumbnailctrl as TC 
import Image 

filename="Raphael-Poli-angle.png" 
class MyForm(wx.Frame): 
    def on_clic(self): 
     print "clicked" 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Choose Dot in Picture", size=(700,500)) 
     self.panel = wx.Panel(self, wx.ID_ANY) 
     png = wx.Image(filename, wx.BITMAP_TYPE_ANY).ConvertToBitmap() 
     image=wx.StaticBitmap(self.panel, -1, png, (1, 1), (png.GetWidth(), png.GetHeight())) 
     image.Bind(wx.EVT_LEFT_DOWN, self.on_clic()) 
     self.Show(True) 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    app.SetTopWindow(frame) 
    frame.Show() 
    app.MainLoop() 

回答

1

您不必「輸入事件」。事件來自外部 - 取決於你的行動。 更改 「DEF on_clic ...」 來

def on_clic(self, evt): 

,改變 「image.Bind ...」 來

image.Bind(wx.EVT_LEFT_DOWN, self.on_clic) 

如果你改變你的on_clic到:

def on_clic(self, evt): 
    x, y=evt.GetPosition() 
    print "clicked at", x, y 

...您還可以獲取圖像被點擊的位置。

請參閱:https://wxpython.org/docs/api/wx.MouseEvent-class.html

+0

哇,太棒了!非常感謝! –

0

所有事件處理程序都必須將該事件作爲參數除外。 on_clic應該是

def on_clic(self, event): 
    print "clicked" 
+0

感謝您的答案,但您可以請開發?什麼是事件?我應該輸入什麼事件? –

+0

那裏有幾個wxpython教程。以下是對事件的簡要介紹https://www.tutorialspoint.com/wxpython/wxpython_event_handling.htm – user2682863