我有一组可用的图像。如果我点击其中一个图像有没有办法确定在wxPython中点击了哪些图像?
答案 0 :(得分: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()
答案 1 :(得分: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()
请记住,我没有测试过......但理论上它应该可以运行......