首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未填充wx.Panel的VTK窗口

未填充wx.Panel的VTK窗口
EN

Stack Overflow用户
提问于 2013-08-12 07:05:11
回答 1查看 1.1K关注 0票数 7

我正在用wxPython和VTK创建一个应用程序。屏幕左侧有一个配置面板( wx.Panel ),右边有一个VTK窗口,也是基于wx.Panel的。面板被放置在wxFrame的箱体中,并按照wxFormBuilder应用程序中定义的比例调整大小,然后使用它生成XRC文件。

我遇到了一个非常具体的问题,因为一些Windows 7机器始终没有正确调整窗口的VTK部分--在上面的屏幕截图中,请参阅VTK窗口周围的白色边框。我正试图使这个VTK窗口成为一个固定的1280x720 --而且确实如此--但是在某些元素中存在一个大小大小问题,即裁剪窗口的底部和右侧。当在Ubuntu10.04、XP或Windows 7的某些版本上运行时,这个bug并不存在(我不确定那些运行的和尚未工作的版本有什么独特之处)。

当我遇到这个错误时,我可以与屏幕的白色部分进行交互--点击是通过VTK交互器正确处理的,所以它属于我的VTK场景的一部分。

应用程序设置如下所示,右边的VTK窗格是graphics_panel。面板是用wxEXPAND设置的,没有其他标志,我的应用程序中的所有元素都被自动设置为大小(没有min、最大值或默认大小设置)。这方面的唯一例外是bSizer1 (主wxFrame sizer),它具有最小的宽度和高度设置(我不确定这是否是正确的方法,但似乎工作正常)。

我从wxFormBuilder中生成XRC,然后在我的应用程序中使用它,其中我的VTK场景设置如下:

代码语言:javascript
运行
复制
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使用什么元素大小的问题,但下面的任何内容都无法解决我的问题。所报告的关于正确运作和错误系统的数值与预期值相同。

代码语言:javascript
运行
复制
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)

在正确运行的系统上,输出是:

代码语言:javascript
运行
复制
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1296, 720)
Parent size: (1296, 720)
Renderer size: (1280, 720)

在“坏”的Windows 7系统上,如本问题中的屏幕截图所示,输出类似于:

代码语言:javascript
运行
复制
---- 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,并让我的配置面板本身适当的大小?

使用Python2.7.5、VTK 5.10.1和wxpython2.8时会出现此问题,但仅在某些Windows 7机器上。

EN

回答 1

Stack Overflow用户

发布于 2013-08-30 08:38:21

和您一样,我正在使用vtk和wxpython开发一个应用程序,这种鸡尾酒有时令人惊讶!我想你的问题是因为没有sizer。下面的代码片段在linux和windows (包括7)上都能工作:

代码语言:javascript
运行
复制
class Plotter3d(wx.Panel):

    def __init__(self, parent, *args, **kwargs):
        wx.Panel.__init__(self, parent, *args, **kwargs)      
        self.build_panel()

    def build_panel(self):
        self.viewer = wx.Panel(self)
        self.iren = wxVTKRenderWindowInteractor(self.viewer, -1, size=(500,500), flag=wx.EXPAND)
        self.iren.SetPosition((0,0))

        self.iren.Enable(1)

        # create renderer  
        self.renderer = vtk.vtkRenderer()
        self.iren.GetRenderWindow().AddRenderer(self.renderer)

        Sizer = wx.BoxSizer(wx.VERTICAL)
        Sizer.Add(self.iren, 1, wx.EXPAND, 0)

        self.viewer.SetSizer(Sizer)        
        Sizer.Fit(self.viewer)
        self.viewer.Layout() 

希望这能帮到你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18181239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档