2013-05-22 44 views
1

我在框架中創建了wx.Grid小部件,並且我想在用戶使用網格小部件時更改我的光標類型。我設法用wx.StockCursor.SetCursor methods這樣做,但是如果用戶將光標移動到單元格和行邊界的交點上方,我的光標會一直返回到標準光標。這是什麼造成的?wx.Grid和wx.StockCursor

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

回答

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

希望有所幫助。

+0

它的行爲相同,首先光標被改變,但一旦我將它移動到單元格和行邊界的交叉點,它就會切換回普通光標。 :/ – Domagoj

+0

好的,謝謝。我已經更新了答案,看看它是否有幫助。 – alecxe

+0

第二種方法幾乎完美!遊標保持更改爲標準,但只要移動交叉點的鼠標,它就會切換回交叉類型。 – Domagoj

相關問題