将鼠标光标更改为小部件

时间:2016-02-21 17:30:49

标签: python wxpython

如何在我的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()

1 个答案:

答案 0 :(得分:0)

最后,我发现通过将每个小部件包装到自己的面板中,我可以避免在我的平台(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)