Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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
Python 在小部件上更改鼠标光标_Python_Wxpython - Fatal编程技术网

Python 在小部件上更改鼠标光标

Python 在小部件上更改鼠标光标,python,wxpython,Python,Wxpython,如何使鼠标光标在我的wx.Panel上的特定小部件上切换 在下面的示例中,我想让光标在bmp2上方时变为手形,图像位于右上角,但它保持为箭头。令我好奇的是,如果我将bmp2.SetCursor替换为bmp4.SetCursor,那么突然之间,光标到处都是一只手 import wx class Example(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent) s

如何使鼠标光标在我的
wx.Panel
上的特定小部件上切换

在下面的示例中,我想让光标在
bmp2
上方时变为手形,图像位于右上角,但它保持为箭头。令我好奇的是,如果我将
bmp2.SetCursor
替换为
bmp4.SetCursor
,那么突然之间,光标到处都是一只手

import wx

class Example(wx.Frame):

    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        self.panel = wx.Panel(self)

        gs = wx.GridSizer(2, 2, 5, 5)

        bmp1 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150))
        bmp2 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150))
        bmp3 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150))
        bmp4 = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.EmptyBitmap(150, 150))

        gs.Add(bmp1, 0, wx.EXPAND)
        gs.Add(bmp2, 0, wx.EXPAND)
        gs.Add(bmp3, 0, wx.EXPAND)
        gs.Add(bmp4, 0, wx.EXPAND)

        bmp2.SetCursor(wx.StockCursor(wx.CURSOR_HAND))

        self.panel.SetSizer(gs) 
        gs.Fit(self)

if __name__ == '__main__':
    app = wx.App()
    Example(None).Show()
    app.MainLoop()

最后我发现,通过将每个小部件包装到自己的面板中,我可以在我的平台(Linux)上避免这个问题

替换创建静态位图的八行,并通过以下方式将其添加到网格大小调整器:

    p1 = wx.Panel(self.panel)
    p2 = wx.Panel(self.panel)
    p3 = wx.Panel(self.panel)
    p4 = wx.Panel(self.panel)
    bmp1 = wx.StaticBitmap(p1, wx.ID_ANY, wx.EmptyBitmap(150, 150))
    bmp2 = wx.StaticBitmap(p2, wx.ID_ANY, wx.EmptyBitmap(150, 150))
    bmp3 = wx.StaticBitmap(p3, wx.ID_ANY, wx.EmptyBitmap(150, 150))
    bmp4 = wx.StaticBitmap(p4, wx.ID_ANY, wx.EmptyBitmap(150, 150))

    gs.Add(p1, 0, wx.EXPAND)
    gs.Add(p2, 0, wx.EXPAND)
    gs.Add(p3, 0, wx.EXPAND)
    gs.Add(p4, 0, wx.EXPAND)

您是否尝试捕捉
bmp2
上的
EVT\u ENTER\u窗口和
EVT\u LEAVE\u窗口上的
事件并通过该事件设置光标?实际测试代码后,我的光标在
bmp2
上方时变为手形。您使用的是什么OS/wxPython版本?@dpwilson我使用的是UbuntuLinux,wxPython版本为2.8.12.1(gtk2 unicode)。对于使用enter/leave事件,我仍然需要找到一种可靠的方法来设置光标。它适用于
bmp4.SetCursor
,但不适用于
self.SetCursor
self.panel.SetCursor
(至少在我的系统上)这一事实让我感到困惑。