python - wx.Grid 和 wx.StockCursor

标签 python wxpython wxgrid

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

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

最佳答案

看来该问题与您通过 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()

希望有帮助。

关于python - wx.Grid 和 wx.StockCursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687672/

相关文章:

python - 根据标签值垂直重新排列 Sankey 图

python - 如何将二进制网格图像转换为二维数组?

python - wxpython:带有 wx.SashLayoutWindow 的多个面板

python - Clipboard.Flush() 在 wxpython 应用程序中总是失败

c++ - 显示 wxGrid 编辑器时如何捕获 KeyEvents

python - 迭代解析非 XML?

python - 如何使用 Scikit-Learn 在 Python 中实现斐波那契数列?

Python '&' 字符丢失

python - 如何使文本适合 wxPython 网格中的单元格?

c++ - 如何获取 wxGrid 中移动列的新索引?