如何在wxPython中控制栅格的视口?
我正在尝试在我的网格应用程序中实现查找功能。我可以使用如何在wxPython中控制栅格的视口?,python,wxpython,wxwidgets,wxgrid,Python,Wxpython,Wxwidgets,Wxgrid,我正在尝试在我的网格应用程序中实现查找功能。我可以使用SetGridCursor(self,row,col)移动光标,但我不知道如何将网格的“视口”移动到新的光标位置。换句话说,当光标移动到用户正在查找的单元格时,用户仍然必须手动滚动,直到找到光标单元格为止 如何以编程方式滚动栅格,使栅格光标在视口中居中 在写这个问题时,我随机进入Grid wiki页面,搜索“滚动”一词,发现: MakeCellVisible(int行,int列)强制特定单元格可见,有效地将网格滚动到给定单元格 这几乎解决了
SetGridCursor(self,row,col)
移动光标,但我不知道如何将网格的“视口”移动到新的光标位置。换句话说,当光标移动到用户正在查找的单元格时,用户仍然必须手动滚动,直到找到光标单元格为止
如何以编程方式滚动栅格,使栅格光标在视口中居中
在写这个问题时,我随机进入Grid wiki页面,搜索“滚动”一词,发现:
MakeCellVisible(int行,int列)
强制特定单元格可见,有效地将网格滚动到给定单元格
这几乎解决了我的问题。我希望单元格在视口中居中,但此函数仅在单元格在屏幕边缘可见之前滚动。我找不到任何只影响网格滚动位置而不影响光标位置的函数。思考? 在这样的情况下,看看哪些代码被“代码> WxWistGe< /Cuo>(核心C++库)所暴露。子类
wxScrolled
公开了以下方法:
- 滚动窗口,使视图开始于给定点
- 获取可滚动窗口区域的大小(以设备为单位)(与客户端大小相反,客户端大小是窗口当前可见的区域)
wxGrid
公开了此方法:
- 返回与逻辑坐标中网格单元的大小和位置相对应的矩形
wxPython
并不总是公开wxWidgets
中可用的所有方法,因此这里是使用未绑定方法的一点创新之处。下面是一些未经测试的伪代码,但应该会让您了解如何做到这一点
在这样的情况下,看看哪些代码被“代码> WxWistGe< /Cube >(核心C++库)所公开。子类
wxScrolled
公开了以下方法:
- 滚动窗口,使视图开始于给定点
- 获取可滚动窗口区域的大小(以设备为单位)(与客户端大小相反,客户端大小是窗口当前可见的区域)
wxGrid
公开了此方法:
- 返回与逻辑坐标中网格单元的大小和位置相对应的矩形
wxPython
并不总是公开wxWidgets
中可用的所有方法,因此这里是使用未绑定方法的一点创新之处。下面是一些未经测试的伪代码,但应该会让您了解如何做到这一点
<>这对我来说是垂直滚动,以使网格光标保持在页面中间:
def set_grid_cursor(grid, irow, icol):
# move the cursor to the cell as usual
grid.GoToCell(irow, icol)
# scroll to keep irow in the middle of the page
ppunit = grid.GetScrollPixelsPerUnit()
cell_coords = grid.CellToRect(irow, icol)
y = cell_coords.y / ppunit[1] # convert pixels to scroll units
scrollPageSize = grid.GetScrollPageSize(wx.VERTICAL)
scroll_coords = (0, y - scrollPageSize / 2)
grid.Scroll(scroll_coords)
您可能需要调用<代码> Wx。CallAfter(StIGGRIDIGURE游标,GRID,IROL,ICOL)< /C> >如果您刚刚更新网格。 < P>这对我来说是垂直滚动的,以保持网格光标在页面的中间:
def set_grid_cursor(grid, irow, icol):
# move the cursor to the cell as usual
grid.GoToCell(irow, icol)
# scroll to keep irow in the middle of the page
ppunit = grid.GetScrollPixelsPerUnit()
cell_coords = grid.CellToRect(irow, icol)
y = cell_coords.y / ppunit[1] # convert pixels to scroll units
scrollPageSize = grid.GetScrollPageSize(wx.VERTICAL)
scroll_coords = (0, y - scrollPageSize / 2)
grid.Scroll(scroll_coords)
如果您刚刚更新了网格,您可能必须使用
wx.CallAfter(set\u grid\u cursor,grid,irow,icol)
调用它。我无法理解此代码和滚动机制,但它可以工作。ThanksI未能理解此代码和滚动机制,但它可以工作。谢谢