【问题标题】:wx.Grid and wx.StockCursorwx.Grid 和 wx.StockCursor
【发布时间】:2013-05-22 09:02:31
【问题描述】:

我已经在我的框架内创建了 wx.Grid 小部件,如果用户正在使用网格小部件,我想更改我的光标类型。我已经设法用wx.StockCursor.SetCursor methods 做到了这一点,但是如果用户将光标移动到单元格和行边框的交叉点上方,我的光标会一直返回到标准光标。这是什么原因造成的?

import wx
import wx.grid as Gridw

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 'Data selection', size=(785, 540))
        self.Centre()
#------------------------------------------------------------------------------ 
        panel = wx.Panel(self, wx.ID_ANY)
#------------------------------------------------------------------------------ 
        self.grid = Gridw.Grid(panel)
        self.grid.CreateGrid(250, 250)
        self.grid.EnableDragGridSize(0)
        self.grid.DisableDragColSize()
        self.grid.DisableDragRowSize()
        self.grid.SetColMinimalWidth(0, 100)
#------------------------------------------------------------------------------ 
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer_v = wx.BoxSizer(wx.VERTICAL)
        sizer_v.Add(wx.Button(panel, -1, 'Button'), 1, wx.CENTER | wx.ALL, 5)
        sizer.Add(self.grid, 1, wx.EXPAND, 5)
        sizer.Add(sizer_v, 0)
        panel.SetSizer(sizer)
#------------------------------------------------------------------------------ 
        self.CreateStatusBar()
        self.Show(True)
#------------------------------------------------------------------------------
        cross_c = wx.StockCursor(wx.CURSOR_CROSS)
        self.grid.SetCursor(cross_c)


if __name__ == '__main__':
    app = wx.App()
    frame = Frame().Show()
    app.MainLoop()

【问题讨论】:

    标签: python wxpython wxgrid


    【解决方案1】:

    看起来问题与您已通过 EnableDragGridSize(0)DisableDragColSize()DisableDragRowSize() 禁用网格调整大小有关。这可以在一定程度上解释为什么您会在单元格边框上看到标准光标。

    不确定它是否会对您有所帮助,因为我不知道您使用的是什么操作系统,但这在 linux 上适用于我:

    cross_c = wx.StockCursor(wx.CURSOR_CROSS)
    self.grid.GetGridWindow().SetCursor(cross_c)
    

    另一种选择是侦听EVT_MOTION 并在事件侦听器中设置光标:

    self.cross_c = wx.StockCursor(wx.CURSOR_CROSS)
    self.grid.GetTargetWindow().SetCursor(self.cross_c)
    wx.EVT_MOTION(self.grid.GetGridWindow(), self.OnMouseMotion)
    
    def OnMouseMotion(self, evt):
        self.grid.GetTargetWindow().SetCursor(self.cross_c)
        evt.Skip()
    

    希望对您有所帮助。

    【讨论】:

    • 它的作用相同,起初光标已更改,但一旦我将其移动到单元格和行边框的交叉点,它就会切换回正常光标。 ://
    • 第二种方法几乎完美!光标不断更改为标准光标,但只要我移动十字路口的鼠标,它就会切换回十字类型。
    猜你喜欢
    • 2018-12-06
    • 2012-12-22
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多