我正在使用 wxPython 和 VTK 创建一个应用程序。屏幕左侧有一个配置面板(wx.Panel),右侧有一个VTK窗口,同样基于wx.Panel。面板被放置在 wxFrame 的 boxsizer 中,并使用 wxFormBuilder 应用程序中定义的比例大小调整大小,然后用于生成 XRC 文件。
我遇到了一个非常具体的问题,一些 Windows 7 机器始终无法正确调整窗口的 VTK 部分的大小 - 请参阅上面屏幕截图中 VTK 窗口周围的白色边框。我正在尝试使这个 VTK 窗口成为固定的 1280x720 - 确实如此 - 但是某些元素存在尺寸问题,该问题正在切割窗口的底部和右侧。在 Ubuntu 10.04、XP 或 Windows 7 的某些版本上运行时不存在此错误(我不确定那些可以工作的和尚未工作的有什么独特之处)。
当遇到这个错误时,我可以与屏幕的白色部分进行交互——通过 VTK 交互器正确处理点击,所以它仍然是我的 VTK 场景的一部分。
应用程序设置如下,右侧的 VTK 窗格是graphics_panel
. 面板设置为wxEXPAND
没有其他标志,并且我的应用程序中的所有元素都自动设置为大小(没有设置最小、最大或默认大小)。唯一的例外是 bSizer1(主要的 wxFrame sizer),它设置了最小宽度和高度(我不确定这是否是正确的方法,但它似乎可以正常工作)。
我从 wxFormBuilder 生成 XRC,然后在我的应用程序中使用它,我的 VTK 场景设置如下:
class MyScene(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, style=wx.NO_BORDER)
#'parent' is main_frame (wx.Frame instance)
self._parent = parent
self.renderer = vtk.vtkRenderer()
# I create and add my VTK actors here (SNIPPED)
self._set_lighting()
self.widget = VTKWidget(self,-1) #VTKWidget is a wxVTKRenderWindowInteractor
self.widget.GetRenderWindow().AddRenderer(self.renderer)
self.widget.Enable(1)
self.widget.SetDoubleBuffered(True)
self.Bind(wx.EVT_SIZE, self.on_size)
on_size
我一直在尝试使用函数来解决什么元素的大小MyScene
问题,但以下没有解决我的问题。正确运行和错误系统报告的值与预期的一样。
def on_size(self, evt):
print "---- MyScene on_size ----"
print "Widget size:", self.widget.GetSize() #wxVTKRenderWindowInteractor
print "Client size:", self.GetClientSize() #wxPanel.GetClientSize
print "Parent size:", self._parent.GetSize() #wxFrame
print "Renderer size:", self.renderer.GetSize() #vtkRenderer
self.renderer.Clear()
self.widget.SetSize((1280, 720))
renWin = self.widget.get_render_window()
renWin.SetSize(1280, 720)
self._parent.Layout()
self.renderer.Clear()
renWin.SetSize(1280, 720)
在正常运行的系统上,输出为:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1296, 720)
Parent size: (1296, 720)
Renderer size: (1280, 720)
在这个问题的屏幕截图中的“坏”Windows 7 系统上,输出类似:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1234, 728)
Parent size: (1234, 728)
Renderer size: (1280, 720)
所以总而言之,我不知道哪个元素的大小不正确。VTK 渲染器大小是正确的,因为将 VTK 屏幕截图保存到文件会产生 1280x720 输出,显示没有白色剪辑的完整场景,如上所述,我可以使用屏幕的白色“剪辑”部分与 VTK 场景进行交互。
这是一个未正确调整大小的 VTK 或 WX 元素吗?谁能给我有关如何进一步解决此问题的任何提示?我应该查看哪些其他元素的大小?我应该如何将我的图形面板硬调整为 1280x720 并让我的配置面板自行调整大小?
使用 Python 2.7.5、VTK 5.10.1 和 wxpython 2.8 时会出现此问题,但仅在某些Windows 7 机器上。