Ich erstelle eine Anwendung mit WxPython und VTK. Es gibt ein Konfigurationsfenster (wx.Panel) auf der linken Seite des Bildschirms und ein VTK-Fenster auf der rechten Seite, ebenfalls basierend auf einem wx.Panel. Die Panels werden in den Boxsizer des wxFrames platziert und mithilfe der proportionalen Skalierung wie in der wxFormBuilder-Anwendung definiert, die dann zum Generieren einer XRC-Datei verwendet wird.VTK-Fenster füllt sich nicht wx.Panel
Ich habe ein sehr spezifisches Problem mit einigen Maschinen Windows 7 nicht konsequent den VTK Teil des Fensters Sizing richtig - Siehe den weißen Rand um das Fenster VTK im Screenshot oben. Ich versuche, dieses VTK-Fenster zu einem festen 1280x720 zu machen - und das ist es - aber es gibt ein Dimensionierungsproblem mit irgendeinem Element, das den unteren und rechten Teil des Fensters zerhackt. Dieser Fehler tritt nicht auf, wenn er unter Ubuntu 10.04, XP oder einigen Builds von Windows 7 ausgeführt wird (ich bin mir nicht sicher, was an denen, die funktionieren und welche noch nicht, einzigartig ist).
Wenn dieser Fehler auftritt, kann ich mit den weißen Bereiche des Bildschirms interagieren - Klicks ordnungsgemäß durch die VTK Interaktorsystem behandelt, es ist also sorten von noch Teil meiner VTK-Szene.
Die Anwendungskonfiguration ist wie folgt, wobei der rechte VTK-Bereich der ist. Das Panel wird mit wxEXPAND
und keine anderen Flags gesetzt, und alle Elemente in meiner App werden automatisch auf die Größe eingestellt (keine Mindest-, Höchst- oder Standardgröße). Die einzige Ausnahme ist bSizer1 (der Haupt-WxFrame-Sizer), der eine minimale Breite und Höhe hat (ich bin mir nicht sicher, ob dies der richtige Weg ist, aber es scheint in Ordnung zu sein).
I XRC von wxFormBuilder erzeugen und diese dann in meiner Anwendung verwenden, wo meine VTK Szene wie folgt einstellen:
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)
ich versucht haben, zu beheben, welches Element ist so bemessen, was Verwenden Sie die on_size
Funktion für MyScene
, aber nichts unter meinem Problem behoben. Die unter sowohl als auch korrekt funktionierenden und fehlerhaften Systeme berichteten Werte sind wie erwartet.
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)
Auf einem korrekt funktionierenden System, der Ausgang ist:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1296, 720)
Parent size: (1296, 720)
Renderer size: (1280, 720)
Auf einem "schlechten" Windows 7-System, wie im Screenshot in dieser Frage, der Ausgang ist ähnlich:
---- MyScene on_size ----
Widget size: (1280, 720)
Client size: (1234, 728)
Parent size: (1234, 728)
Renderer size: (1280, 720)
Also zusammenfassend, ich weiß nicht, welches Element falsch sortiert wird. Die VTK-Renderer-Größe ist korrekt, da die Aufnahme eines VTK-Screenshots in eine Datei eine 1280x720-Ausgabe ergibt, die die gesamte Szene ohne Weißabschneiden zeigt. Wie oben gesagt, kann ich mit der VTK-Szene mit den abgeschnittenen weißen Teilen des Bildschirms interagieren.
Wird ein VTK- oder WX-Element nicht richtig dimensioniert? Kann mir jemand Tipps geben, wie man dieses Problem weiter beheben kann? Auf welche anderen Elemente sollte ich bei den Größen achten? Wie sollte ich mein Grafik-Panel auf 1280x720 skalieren und mein Config-Panel selbst passend dimensionieren lassen? Das Problem tritt auf, wenn Python 2.7.5, VTK 5.10.1 und wxpython 2.8, aber nur unter einige Windows 7-Computer verwendet werden.
Reproduzieren des Problems helfen. Sie werden viel mehr Interaktion bekommen. – Tamer
@Tamer gibt es ein WxWidgets-Beispiel mit einem VTK-Fenster? Ich vermute, dass das Dimensionierungsproblem eher mit der VTK-Seite als mit der WX-Seite zusammenhängt. – jozzas
Können Sie ein minimal ausführbares Beispiel erstellen, das das Problem veranschaulicht? – Fenikso