Я пытаюсь выяснить, как устранить поведение перетаскивания, которое по умолчанию используется в wx.Grid. Я хотел бы закончить с сеткой, для которой пользователь не может перетащить вообще.
Я (в конце концов) нашел MouseEventsManager, который выглядел идеально, но не выполняет то, что я ожидаю:
import wx
import wx.grid as gridlib
class GridMouseEventsManager(wx.MouseEventsManager):
def MouseDragBegin(self, item, pos):
return False
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Sample grid")
self.grid = gridlib.Grid(self)
self.grid.CreateGrid(5,4)
self.grid.SetCellSize(4,1,1,2)
self.grid.SetColLabelSize(0) # eliminates spreadsheet-style row & col headers
self.grid.SetRowLabelSize(0)
rowHeight = 50
colWidth = 50
for i in range(1,5):
self.grid.SetRowSize(i, rowHeight)
for i in range(0,4):
self.grid.SetColSize(i, colWidth)
self.grid.SetCellBackgroundColour(4, 3, wx.LIGHT_GREY)
# self.grid.SetCellHighlightPenWidth(0) # eliminates highlighted cell, i.e., 'current' cell in spreadsheet
self.grid.EnableCellEditControl(False)
self.grid.Bind(gridlib.EVT_GRID_SELECT_CELL, self.GridSelect, self.grid)
self.grid_mouse_events_manager = GridMouseEventsManager(self.grid)
self.Bind(wx.EVT_CLOSE, self.on_exit)
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(self.grid, 0, wx.ALIGN_CENTER)
self.selectedRow = -1
self.selectedCol = -1
self.SetSizerAndFit(mainSizer)
# self.ShowFullScreen(True)
def GridSelect(self, event):
col = event.GetCol()
row = event.GetRow()
penWidth = 0
if col == 1:
penWidth = 2
self.grid.SetCellHighlightPenWidth(penWidth)
self.Refresh()
def on_exit(self, event):
self.grid_mouse_events_manager.Destroy()
self.Destroy()
# Run the program
if __name__ == "__main__":
app = wx.App()
frame = MyForm().Show()
app.MainLoop()
Это по-прежнему поведение по умолчанию, которое заключается в выборе нескольких ячеек, когда пользователь щелкает и перетаскивает. Я хотел бы полностью отключить перетаскивание и / или выбор нескольких ячеек.
Я довольно новичок в Python и еще новее в wxPython; Я не смог найти объяснение или пример того, как это сделать. Я пробовал конструктор MouseEventsManager как с объектом self
, так и с объектом grid
, ни один из которых, похоже, не имеет никакого эффекта.
Как это сделать?