我使用wxPython和VTK創建應用程序。屏幕左側有一個配置面板(wx.Panel),右側有一個VTK窗口,也是基於wx.Panel。面板放置在wxFrame的boxsizer中,並使用wxFormBuilder應用程序中定義的比例大小來確定大小,然後用於生成XRC文件。VTK窗口不填充wx.Panel
我有一個非常具體的問題,一些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)
我一直在試圖解決什麼元素的大小是什麼MyScene
使用on_size
函數,但下面沒有解決我的問題。正如預期的那樣,在兩個上報告的值正確運行並且錯誤的系統。
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計算機上出現此問題。
與wxWidgets的樣本之一重現問題。你會得到更多的互動。 – Tamer
@Tamer是否有涉及使用VTK窗口的wxWidgets示例?我懷疑大小問題比WX方面更關係到VTK方面。 – jozzas
你可以建立一個最小的可運行示例來演示這個問題嗎? – Fenikso