Sto creando un'applicazione con wxPython e VTK. C'è un pannello di configurazione (wx.Panel) sulla sinistra dello schermo e una finestra VTK sulla destra, anch'essa basata su un wx.Panel. I pannelli sono posizionati nel boxsize di wxFrame e dimensionati utilizzando il dimensionamento proporzionale come definito nell'applicazione wxFormBuilder, che viene quindi utilizzato per generare un file XRC.Finestra VTK che non riempie wx.Panel
Sto avendo un problema molto specifico con alcuni Windows 7 macchine in modo coerente non corretto dimensionamento della parte VTK della finestra - Vedere il bordo bianco intorno alla finestra VTK nello screenshot qui sopra. Sto tentando di rendere questa finestra VTK un fisso 1280x720 - e lo è - ma c'è un problema di dimensionamento con qualche elemento che sta tagliando in basso ea destra della finestra. Questo bug non è presente quando viene eseguito su Ubuntu 10.04, XP o alcuni build di Windows 7 (non sono sicuro di cosa sia unico per quelli che funzionano e quelli che non lo sono ancora).
Quando si verifica questo errore, posso interagire con le porzioni bianche dello schermo: i clic vengono gestiti correttamente tramite l'interactor VTK, quindi è ancora una parte della mia scena VTK.
L'installazione dell'applicazione è la seguente, dove il riquadro VTK a destra è il graphics_panel
. Il pannello è impostato con wxEXPAND
e nessun altro contrassegno e tutti gli elementi nella mia app sono impostati automaticamente sulle dimensioni (nessuna dimensione min, max o predefinita). L'unica eccezione a questo è bSizer1 (il principale wxFrame sizer) che ha un minimo di larghezza e altezza impostato (non sono sicuro se questo è il modo giusto per andare, ma sembra funzionare bene).
ho generare XRC da wxFormBuilder e quindi utilizzare questo nella mia domanda, dove hanno la mia scena VTK impostato come di seguito:
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)
ho cercato di risolvere i problemi quale elemento ha una dimensione di ciò che utilizzando la funzione on_size
per MyScene
, ma nulla di seguito risolve il problema. I valori riportati su sia che funzionano correttamente e sistemi errati sono come previsto.
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)
Su un sistema che funziona correttamente, l'output è:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1296, 720)
Parent size: (1296, 720)
Renderer size: (1280, 720)
Su un "cattivo" di sistema di Windows 7, come nello screenshot in questa questione, l'output è simile:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1234, 728)
Parent size: (1234, 728)
Renderer size: (1280, 720)
Quindi, in sintesi, non so quale elemento viene ridimensionato in modo errato. La dimensione del renderer VTK è corretta, poiché l'acquisizione di uno screenshot VTK in file produce un'uscita 1280x720 che mostra l'intera scena senza clipping bianco e, come detto sopra, posso interagire con la scena VTK usando le porzioni bianche dello schermo.
Si tratta di un elemento VTK o WX che non viene ridimensionato correttamente? Qualcuno può darmi qualche consiglio su come risolvere ulteriormente questo problema? Quali altri elementi dovrei guardare alle dimensioni di? Come devo dimensionare il mio pannello grafico su 1280x720 e lasciare che la dimensione del pannello di configurazione sia appropriata?
Il problema si verifica quando si utilizzano Python 2.7.5, VTK 5.10.1 e wxpython 2.8, ma solo su alcune macchine di Windows 7.
riprodurre il problema con uno dei campioni wxWidgets. Avrai molta più interazione. – Tamer
@Tamer c'è un esempio di wxWidgets che riguarda l'utilizzo di una finestra VTK? Sospetto che il problema di dimensionamento sia più correlato al lato VTK delle cose rispetto al lato WX. – jozzas
È possibile creare un campione eseguibile minimo che dimostri il problema? – Fenikso