Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定wxPython中的选定图像_Python_User Interface_Wxpython - Fatal编程技术网

确定wxPython中的选定图像

确定wxPython中的选定图像,python,user-interface,wxpython,Python,User Interface,Wxpython,我有一套可用的图像。如果我点击其中一个图像,有没有办法确定在wxPython中点击了哪些图像?你几乎肯定要自己计算。最直接的方法是使用像wx.EVT_LEFT_DOWN这样的鼠标事件,并在事件处理程序中获取鼠标坐标。然后使用该信息告诉您在wxPython窗口中单击的位置。您的每个图像小部件或DC或您正在使用的任何东西都可以报告其大小和位置,因此,如果鼠标坐标位于X图像的边界内,您就知道它已被单击。还可以使用HitTest()方法,具体取决于用于显示图像的内容 编辑:如果使用wx.StaticBi

我有一套可用的图像。如果我点击其中一个图像,有没有办法确定在wxPython中点击了哪些图像?

你几乎肯定要自己计算。最直接的方法是使用像wx.EVT_LEFT_DOWN这样的鼠标事件,并在事件处理程序中获取鼠标坐标。然后使用该信息告诉您在wxPython窗口中单击的位置。您的每个图像小部件或DC或您正在使用的任何东西都可以报告其大小和位置,因此,如果鼠标坐标位于X图像的边界内,您就知道它已被单击。还可以使用HitTest()方法,具体取决于用于显示图像的内容

编辑:如果使用wx.StaticBitmap,您将如何执行此操作,它实际上允许您将wx.EVT\u左\u附加到它:

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()

你没有告诉我们你是如何显示你的图像的吗?你是不是在华盛顿特区就把他们放进去了?您正在为它们创建面板吗?等正确设置项目很重要。基本上你没有给我们任何信息来帮助你

记住所有这些,类似的东西可以很好地工作(这被称为一个自包含的代码示例,您应该始终提供一个带有问题的示例,以便于人们帮助您)


请记住,我没有测试它。。。但从理论上讲,它应该是有效的……

是的。。。。你试过什么。。。因为基本上它的工作原理和你期望的一样……我尝试过谷歌搜索,但没有发现任何相关的东西;如何将点击该图像绑定到决定响应的函数。如果我按顺序排列,每个图像不都会被调用吗?你没有告诉我们你是如何显示图像的吗?你是不是在华盛顿特区就把他们放进去了?您正在为它们创建面板吗?等正确设置您的项目很重要,我在这里找到了Tkinter的项目,但是找不到比我更好的wxpython+1的示例代码。。。我只是对gaveI同意的信息太少感到恼火,这就是为什么我首先要写一个例子。这可能对DCs不起作用
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()