【问题标题】:wxPyhton selecting more rows in wxGrid by holding ShiftwxPyhton 通过按住 Shift 在 wxGrid 中选择更多行
【发布时间】:2014-07-22 12:32:55
【问题描述】:

我希望允许用户在单击用户要选择的第一行和最后一行时按住 Shift 按钮在 Grid 中选择更多行。 我已经对此进行了测试:

    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) 函数正在调用 -> 好的
2) 尽管进入循环,但它不会选择行(使用 PyDev 调试器进行测试)
3)如果我选择例如第 3 行作为顶行,第 6 行作为底行,wxPython 选择从 0 到 6 的所有行...

我不知道该怎么办...
Python 版本:2.7
wxPython-2.9版

【问题讨论】:

    标签: python wxpython


    【解决方案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()
    

    【讨论】:

    • 你很有趣...如果我测试了这段代码想要输出所有的行并保持shift,它也不起作用...这只是来自wxDemo的代码示例
    • 这段代码适用于Xubuntu、wxPython 2.8.12、Python 2.7
    • @alabamajack------- 我认为您不清楚您的要求。请提出您的要求
    • 如果我取一行(比如 1),然后在我取另一行(比如 6)时按住 Shift,它不会选择任何单元格。如果我让使用 self.myGrid.GetSelectedRows() 打印 selectedrows 它只返回一个空列表...
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2013-06-27
    相关资源
    最近更新 更多