मेरे पास एक पैनल है जिसमें कई छवियां हैं, जिनमें से प्रत्येक एक ही ईवेंट हैंडलर से जुड़ी है। मैं कैसे निर्धारित कर सकता हूं कि इवेंट हैंडलर से कौन सी छवि क्लिक की जा रही है? मैंने Event.GetEventObject() का उपयोग करने का प्रयास किया लेकिन यह उस छवि के बजाय मूल पैनल लौटाता है जिसे क्लिक किया गया था।wxPython: किसी ईवेंट के स्रोत को निर्धारित करने के लिए कैसे करें
यहां कुछ नमूना कोड है:
import math
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id=-1,title="",pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE,
name="frame"):
wx.Frame.__init__(self,parent,id,title,pos,size,style,name)
self.panel = wx.ScrolledWindow(self,wx.ID_ANY)
self.panel.SetScrollbars(1,1,1,1)
num = 4
cols = 3
rows = int(math.ceil(num/3.0))
sizer = wx.GridSizer(rows=rows,cols=cols)
filenames = []
for i in range(num):
filenames.append("img"+str(i)+".png")
for fn in filenames:
img = wx.Image(fn,wx.BITMAP_TYPE_ANY)
img2 = wx.BitmapFromImage(img)
img3 = wx.StaticBitmap(self.panel,wx.ID_ANY,img2)
sizer.Add(img3)
img3.Bind(wx.EVT_LEFT_DCLICK,self.OnDClick)
self.panel.SetSizer(sizer)
self.Fit()
def OnDClick(self, event):
print event.GetEventObject()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame(None)
frame.Show()
app.MainLoop()
मैंने स्टैटिक बिटमैप कन्स्ट्रक्टर (0 से एन -1) के लिए आईडी तर्क के रूप में काउंटर पास करके ऊपर पोस्ट किए गए कोड पर यह कोशिश की। हालांकि, ईवेंट पर GetId() को कॉल करना हमेशा -202 देता है, किसी कारण से ... – Johnny
अच्छी तरह से आप इसे दो तरीकों से कर सकते हैं, यह आपकी छवियों के लिए पहले से आईडी की एक सूची बनाते हैं (और अपने स्थिर बिटमैप्स को तत्काल करते समय उनका उपयोग करें) बस उनकी तुलना करें ... या अपनी छवि वस्तुओं को एक सूची में रखें, फिर वहां आईडी की तुलना करने के लिए आप उन पर GetId() को कॉल कर सकते हैं, फिर भी यदि आप एक उदाहरण चाहते हैं तो इसे जोड़ें ... इसे अनुसरण करना आसान हो सकता है .. – volting
क्षमा करें मैंने अभी देखा है कि मैं आपकी टिप्पणी को याद करता हूं। यदि आपका हो रहा है -202 इसका मतलब है कि आप कुछ गलत कर रहे हैं .. यदि आप वास्तव में काउंटर का उपयोग कर रहे हैं .. तो आपको उन्हें GetId() के साथ नंबर वापस प्राप्त करना चाहिए -202 की एक आईडी से पता चलता है कि आपका यादृच्छिक आईडी – volting