2014-03-06 29 views
2

我想要获取网格上可见行/列的范围。网格可以滚动,我想要第一个显示的行和最后一个显示的行在屏幕上。如果函数可以对列执行相同的操作,那么它会是一个优点。WxPython:如何获取wx网格中显示的单元格的范围?

现在我想出了这个解决方案:如果

def GetVisibleRowsRange(self): 
    """ 
    return the row number of the first and last visible rows 
    """ 
    r = 0; 
    max = self.GetNumberRows() 
    while r < max and not self.IsVisible(row=r, col=0, wholeCellVisible=False): 
     r += 1 
    firstRow = r  
    while r < max and self.IsVisible(row=r, col=0, wholeCellVisible=False): 
     r += 1 
    lastRow = r 
    return firstRow, lastRow 

这仅适用于第一列是可见的。

我想知道如果我可以通过使用Windows虚拟尺寸函数直接获取可见行/列的范围?

回答

2

我正在使用wxPerl,并且下面的python代码未经测试。 此方法可行,但您可能需要“get a little creative using unbound methods”。

ux, uy = self.GetScrollPixelsPerUnit() 
sx, sy = self.GetViewStart() 
w, h = self.GetGridWindow().GetClientSize().Get() 
sx *= ux ; sy *= uy 

x0 = self.XToCol(sx) 
y0 = self.YToRow(sy) 
x1 = self.XToCol(sx + w, True) 
y1 = self.YToRow(sy + h, True) 
+1

谢谢萨姆,它的工作效率更高。我在最近2次调用中添加了True作为'clipToMinMax'参数以使其工作。 – GregW

相关问题