【问题标题】:Change mouse cursor over widget在小部件上更改鼠标光标
【发布时间】:2016-02-21 17:30:48
【问题描述】:

如何使鼠标光标在我的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()

【问题讨论】:

  • 您是否尝试过捕捉bmp2 上的EVT_ENTER_WINDOWEVT_LEAVE_WINDOW 事件并通过它设置光标?
  • 在实际测试您的代码后,当超过bmp2 时,我的光标变为手形。您使用的是什么 OS/wxPython 版本?
  • @dpwilson 我在 Ubuntu Linux 上使用 wxpython 版本 2.8.12.1 (gtk2-unicode)。对于使用进入/离开事件,我仍然必须找到一种可靠的方法来设置光标。它适用于bmp4.SetCursor 但不适用于self.SetCursorself.panel.SetCursor(至少在我的系统上)这一事实让我感到困惑。

标签: python wxpython


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2010-11-16
    • 2010-11-15
    • 2021-02-10
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多