2013-08-12 15 views
7

wxPython ve VTK ile bir uygulama oluşturuyorum. Ekranın solunda bir yapılandırma paneli (wx.Panel) ve sağda da bir wx.Panel'e dayanan bir VTK penceresi vardır. Paneller wxFrame'in boxsizer'ına yerleştirilir ve wxFormBuilder uygulamasında tanımlandığı şekilde orantılı boyutlandırma kullanılarak boyutlandırılır ve daha sonra bir XRC dosyası oluşturmak için kullanılır.VTK penceresi doldurmuyor wx.Panel

enter image description here

Ben sürekli doğru pencerenin VTK bölümünü boyutlandırma değil bazı Windows 7 makineleriyle çok özel bir sorun yaşıyorum - Yukarıdaki ekran VTK pencerenin etrafında beyaz sınır bakın. Ben bu VTK penceresini sabit 1280x720 yapmak için çalışıyorum - ve - ama pencere alt ve sağ doğrama bazı eleman ile bir boyutlandırma sorunu var. Ubuntu 10.04, XP veya Windows 7'nin bazı yapılarında çalıştırıldığında bu hata mevcut değil (çalışmakta olanlar ve henüz yapmayanlar hakkında benzersiz olanlardan emin değilim).

Bu hatayı yaşıyorsanız, ekranın beyaz kısımlarıyla etkileşimde bulunabilirim - tıklamalar VTK uygulayıcısı aracılığıyla doğru şekilde işleniyor, dolayısıyla VTK sahnesinin bir parçası.

Uygulama kurulumu, sağdaki VTK bölmesinin graphics_panel olduğu aşağıdaki gibidir. Panel wxEXPAND ile ayarlanmış ve başka hiçbir bayrak yok ve uygulağımdaki tüm öğeler otomatik olarak boyutlandırılacak (minimum, maksimum veya varsayılan boyut ayarlanmamış). Bunun tek istisnası, minimum genişlik ve yükseklik ayarına sahip olan bSizer1 (ana wxFrame boyutlandırıcı) 'dır (Bu doğru yol olup olmadığından emin değilim, ama işe yarıyor gibi görünüyor).

panel setup

Ben wxFormBuilder gelen xRC oluşturmak ve sonra benim VTK sahne olarak aşağıda kurdunuz benim uygulamada, bu kullanın: Ne eleman giderilir çalışıyorlar

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) 

ne boyuttadır MyScene için on_size işlevini kullanarak, ancak aşağıda hiçbir şey sorunumu giderir. numaralı telefon numarasında numaralı telefonlarda doğru şekilde çalışan ve hatalı çalışan sistemler beklendiği gibi çalışır. Bir düzgün bir sistemde

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) 

, çıkışı:

bu söz konusu ekran görüntüsünde olduğu gibi "kötü" Windows 7 sisteminde
---- MyScene on_size ---- 
Widget size: (1280, 720) 
Client size: (1296, 720) 
Parent size: (1296, 720) 
Renderer size: (1280, 720) 

, çıkış benzer:

---- MyScene on_size ---- 
Widget size: (1280, 720) 
Client size: (1234, 728) 
Parent size: (1234, 728) 
Renderer size: (1280, 720) 

Özet olarak, hangi öğenin hatalı boyutlandığını bilmiyorum. VTK görüntüleyici boyutunun doğru olması, dosyaya bir VTK ekran görüntüsünün alınmasıyla, beyaz kırpma olmaksızın tüm sahneyi gösteren 1280x720 bir çıktı üretir ve yukarıda belirtildiği gibi, ekranın beyaz 'kırpılmış' kısımlarını kullanarak VTK sahnesiyle etkileşim kurabilirim.

Bu bir VTK veya WX öğesi doğru boyutlandırılmıyor mu? Herkes bu sorunu nasıl giderebileceğine dair bana bir ipucu verebilir mi? Hangi diğer elementlere bakmalıyım? Grafik panelimi 1280x720'ye kadar sert boyutlandırma ve yapılandırma panel boyutumun kendisinin uygun şekilde verilmesine nasıl izin vermeliyim?

Sorun, Python 2.7.5, VTK 5.10.1 ve wxpython 2.8 kullanırken yalnızca bazı Windows 7 makinelerinde oluşur.

+0

WxWidgets örneklerinin biriyle sorunu yeniden yardımcı olacaktır. Çok daha fazla etkileşim olacak. – Tamer

+0

@Tamer, bir VTK penceresi kullanmayı içeren bir wxWidgets örneği var mı? Boyutlandırma sorununun, şeylerin VTK tarafıyla WX tarafına göre daha fazla ilişkili olduğundan şüpheleniyorum. – jozzas

+0

Sorunu gösteren minimal bir örnek oluşturabilir misiniz? – Fenikso

cevap

1

Sizin gibi ben vtk ve wxpython kullanarak bir uygulama geliştiriyorum, bu kokteyl bazen şaşırtıcı! Bence senin problemin, bir boyutsuz olmasından geliyor. linux ve (7 dahil) pencerelerde işin hem aşağıda pasajı:

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() 

umut bu size

İlgili konular