我正在使用wxPython和VTK创建一个应用程序。屏幕左侧有一个配置面板(wx.Panel),右侧有一个基于wx.Panel的VTK窗口。这些面板被放置在wxFrame的boxsizer中,并使用在wxFormBuilder应用程序中定义的比例大小进行调整,然后生成一个XRC文件。
我遇到了一个非常特定的问题,即某些Windows 7机器无法正确调整窗口的VTK部分大小 - 如上面截图中VTK窗口周围的白色边框。我试图使这个VTK窗口固定为1280x720像素 - 确实已经达成了这一点,但是存在一个调整大小的问题,会截断窗口底部和右侧的一些元素。当在Ubuntu 10.04、XP或某些Windows 7版本上运行时,不存在此错误(我不确定哪些方面是工作和不工作的)。
当遇到此错误时,我可以与屏幕的白色区域进行交互 - 点击通过VTK交互器正确处理,因此它仍然是我的VTK场景的一部分。
应用程序设置如下,其中右侧的VTK窗格是
我从wxFormBuilder生成XRC,然后在我的应用程序中使用它,其中我的VTK场景设置如下:
在一个正常运行的系统上,输出应该是:
在一个"糟糕的"Windows 7系统中,就像在这个问题的截图中一样,输出结果是类似的:
总的来说,我不知道哪个元素的大小设置不正确。VTK渲染器的大小是正确的,因为将VTK截图保存到文件中会产生1280x720的输出,显示完整场景而没有白色裁剪,正如上面所说,我可以使用屏幕上的白色“裁剪”部分与VTK场景进行交互。
这是VTK或WX元素大小设置不正确吗?有人能给我一些关于如何进一步排除此问题的提示吗?我应该查看哪些其他元素的大小?我应该如何将我的图形面板硬性调整为1280x720,并让我的配置面板自适应大小?
此问题发生在使用Python 2.7.5、VTK 5.10.1和wxpython 2.8时,在一些Windows 7机器上才会出现。
我遇到了一个非常特定的问题,即某些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机器上才会出现。