我只想在wxGrid中选择一行。是否可以在wxGrid中禁用多选?我尝试过SetSelectionMode,它帮助我只选择行。但我不能将它用于单行选择。
发布于 2012-02-21 22:31:39
捕获wxEVT_GRID_SELECT_CELL事件。
使用GetSelectedRows()获取所选行的数组。
如果选择了多个行-
发布于 2013-04-06 00:31:16
wx.EVT_MOTION(self.grid.GetGridWindow(), self.OnMouseMotion)
wx.EVT_LEFT_DOWN(self.grid.GetGridWindow(), self.OnMouseLeftDown)
wx.EVT_KEY_DOWN(self.grid.GetGridWindow(), self.OnKeyPress)
def OnMouseMotion(self,event):
if event.Dragging():
return
else:
event.Skip()
def OnMouseLeftDown(self,event):
if event.AltDown() or event.ShiftDown() or event.ControlDown():
return
else:
event.Skip()
def OnKeyPress(self,event):
if event.GetKeyCode() in [wx.WXK_SHIFT,wx.WXK_ALT,wx.WXK_CONTROL,wx.WXK_UP,wx.WXK_DOWN,]:
return
else:
event.Skip()发布于 2013-10-31 22:37:30
我发现这个问题已经很古老了,但在互联网上关于这个问题的争论还不多。
在互联网上发布的许多解决方案都是不完整的,或者有一些奇怪的地方。这是我的解决方案。我有一个继承wxGrid的类,具有以下方法
void ReportGrid::DisableRangeHandler (wxGridRangeSelectEvent &ev)
{
if( ev.Selecting() && (ev.GetTopRow() != ev.GetBottomRow()) ) {
ev.StopPropagation();
ev.Veto();
}
}
void ReportGrid::DisableRangeSelectCellHandler (wxGridEvent &ev)
{
SelectRow(ev.GetRow());
}
void ReportGrid::DisableCtrlMaiusHandler (wxGridEvent &ev)
{
if (ev.ControlDown() || ev.ShiftDown()){
ev.Veto();
} else {
ev.Skip();
}
}
void ReportGrid::DisableDraggingHandler (wxMouseEvent &ev)
{
if (ev.Dragging()){
ev.Skip(false);
}
}
void ReportGrid::SingleSelectionMode(bool enabled)
{
if (_singleSelection == enabled){
return;
}
if (enabled){
Bind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this);
Bind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this);
Bind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this);
GetGridWindow()->Bind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this);
_singleSelection = true;
} else {
Unbind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this);
Unbind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this);
Unbind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this);
GetGridWindow()->Unbind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this);
_singleSelection = false;
}
}这是我在wxWidgets上最接近的单行选择。
https://stackoverflow.com/questions/9378977
复制相似问题