2013-04-04 22 views
1

我有一組可用的圖像。如果我點擊其中一個圖像,是否有一種方法可以確定在wxPython中點擊了哪些圖像?確定wxPython中的選定圖像

+0

是的....你有什麼試過...因爲它基本上就像你期望的那樣工作... – 2013-04-04 17:34:45

+0

我嘗試了谷歌搜索,但沒有發現任何相關的;如何將該圖像上的點擊綁定到決定響應的函數上。如果我按順序放置它們,不會爲每個圖像調用它們嗎? – zer0nes 2013-04-04 17:41:40

+0

你不告訴我們關於你如何顯示你的圖像的任何事情?你是否在直流電上正確地使用它們?你在爲他們創建面板嗎?等...正確地設置你的項目是很重要的 – 2013-04-04 19:22:02

回答

3

你幾乎肯定必須自己計算一下。最直接的方法是使用像wx.EVT_LEFT_DOWN這樣的鼠標事件,並在事件處理程序中獲取鼠標的座標。然後使用這些信息告訴你在你點擊的wxPython窗口上的什麼位置。每個圖像小部件或DC或任何您使用的都可以報告它的大小和位置,因此如果鼠標座標位於X圖像的邊界內,就會知道它已被點擊。您可能也可以使用HitTest()方法,具體取決於您用來顯示圖像的內容。

編輯:這裏是你會怎麼做,如果你使用的是wx.StaticBitmap,您安裝wx.EVT_LEFT_DOWN它實際上讓:

import wx 

class PhotoCtrl(wx.Frame): 
    def __init__(self): 
     size = (400,800) 
     wx.Frame.__init__(self, None, title='Photo Control', size=size) 

     self.panel = wx.Panel(self) 


     img = wx.EmptyImage(240,240) 
     self.imageCtrl = wx.StaticBitmap(self.panel, wx.ID_ANY, 
             wx.BitmapFromImage(img), 
             name="emptyImage") 
     imageCtrl2 = wx.StaticBitmap(self.panel, wx.ID_ANY, 
            wx.BitmapFromImage(img), 
            name="anotherEmptyImage") 

     self.imageCtrl.Bind(wx.EVT_LEFT_DOWN, self.onClick) 
     imageCtrl2.Bind(wx.EVT_LEFT_DOWN, self.onClick) 

     mainSizer = wx.BoxSizer(wx.VERTICAL) 
     mainSizer.Add(self.imageCtrl, 0, wx.ALL, 5) 
     mainSizer.Add(imageCtrl2, 0, wx.ALL, 5) 

     self.panel.SetSizer(mainSizer) 
     self.Show() 

    #---------------------------------------------------------------------- 
    def onClick(self, event): 
     """""" 
     print event.GetPosition() 
     imgCtrl = event.GetEventObject() 
     print imgCtrl.GetName() 


if __name__ == '__main__': 
    app = wx.App(False) 
    frame = PhotoCtrl() 
    app.MainLoop() 
+0

你能舉個例子嗎?也許一些示例代碼... – zer0nes 2013-04-04 18:11:31

+0

我發現它在Tkinter在這[鏈接](http://stackoverflow.com/questions/ 5501192/how-to-display-picture-and-get-mouse-click-coordinate-on-it)但找不到wxpython的示例代碼 – zer0nes 2013-04-04 18:20:02

+0

我添加了一個簡單示例 – 2013-04-04 19:29:36

0

你不告訴我們怎麼什麼你正在顯示你的圖像?你是否在直流電上正確地使用它們?你在爲他們創建面板嗎?等等......正確地設置你的項目很重要。基本上你給我們零信息來幫助你。

保持所有考慮到這一點,像這樣的正常工作(這就是所謂的自包含的代碼示例,你應該總是提供一個與你的問題,使人們更容易幫助你)

import wx 
a = wx.App(redirect=False) 
f= wx.Frame(None,-1,"Some Frame",size = (200,200)) 
sz = wx.BoxSizer(wx.HORIZONTAL) 
def OnClick(evt): 
    print "Clicked:",evt.GetId()-10023 
for i,img in enumerate(["img1","img2","img3"]): 
    id = 10023+i 
    p = wx.Panel(f,-1) 
    sz.Add(p) 
    sz1 = wx.BoxSizer() 
    p.Bind(wx.EVT_LEFT_UP,OnClick) 
    bmp = wx.Image(img).ConvertToBitmap() 
    b = wx.StaticBitmap(p,-1,bmp) 
    sz1.Add(b) 
    p.SetSizer(sz1) 

f.SetSizer(sz) 
f.Layout() 
f.Fit() 
f.Show() 
a.MainLoop() 

請記住,我沒有測試它...但理論上它應該工作...