我想让用户在点击用户想要选择的第一行和最后一行时按住Shift键来选择网格中的更多行。 我测试了这个:
def OnRangeSelect(self, event):
if event.Selecting():
top = event.GetTopRow()
bottom = event.GetBottomRow()
while top <= bottom:
print bottom
self.myGrid.SelectRow(top, True)
top += 1
event.Skip()
和此:
def OnRangeSelect(self, event):
event.Skip()
但总是一样......
但是发生了棘手的事情:
1)该功能正在调用 - &gt;好的
2)虽然它进入循环但没有选择行(使用PyDev调试器的testet)
3)如果我选择e.G.第3行作为顶行,第6行作为底行,wxPython选择从0到6的所有行...
我不知道该怎么办...
Python版本:2.7
wxPython-Version 2.9
答案 0 :(得分:1)
参考此代码可能有所帮助:
import wx
import wx.grid as gridlib
class MyGrid(gridlib.Grid):
def __init__(self, parent):
"""Constructor"""
gridlib.Grid.__init__(self, parent)
self.CreateGrid(12, 8)
self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.OnshiftSelect)
def OnshiftSelect(self, evt):
if evt.Selecting():
msg = 'Selected'
else:
msg = 'Deselected'
print "OnshiftSelect: %s top-left %s, bottom-right %s\n" % (msg, evt.GetTopLeftCoords(),
evt.GetBottomRightCoords())
evt.Skip()
class MyForm(wx.Frame):
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, parent=None, title="Grid events")
panel = wx.Panel(self)
myGrid = MyGrid(panel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(myGrid, 1, wx.EXPAND)
panel.SetSizer(sizer)
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()