wxPyhton通过按住Shift键在wxGrid中选择更多行

时间:2014-07-22 12:32:55

标签: python wxpython

我想让用户在点击用户想要选择的第一行和最后一行时按住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

1 个答案:

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