1

フレーム内に 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()
4

1 に答える 1

1

EnableDragGridSize(0)この問題は、 、 、DisableDragColSize()およびを介してグリッドのサイズ変更を無効にしたことに関連しているようですDisableDragRowSize()。これは、セルの境界線に標準のカーソルが表示される理由をある程度説明できます。

使用しているOSがわからないため、役立つかどうかはわかりませんが、Linuxではこれでうまくいきます:

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

もう1つのオプションは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()

それが役立つことを願っています。

于 2013-05-22T10:29:46.380 に答える