Fenstergröße nachträglich anpassen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Neu111
User
Beiträge: 69
Registriert: Dienstag 10. März 2020, 19:02

Hallo,
ich nutze 2 Panels:
panel1 ist immer sichtbar:

Code: Alles auswählen

self.panel1 = wx.Panel(self.topPanel, -1, pos=(0, 0), size=(100, 50))
und panel2 wird erst eingeblendet, wenn ein Button gedrückt wird:

Code: Alles auswählen

self.panel2 = wx.Panel(self.topPanel, -1, pos=(0, 50), size=(100, 50))
Zweimal eine Höhe von 50 ergibt eine Gesamthöhe von 100.

Ein weiterer Button bewirkt nun, dass panel2 wieder entfernt wird:

Code: Alles auswählen

button.Bind(wx.EVT_BUTTON, lambda event: self.panel2.Destroy())
Was muss ich tun, damit nach dem entfernen von panel2 das komplette Fenster auf auf eine Höhe von 50 reduziert wird?

Des weiteren habe ich ein Problem mit folgenden Code:

Code: Alles auswählen

class meineClass(wx.Frame):
    def __init__(self, parent, title):
        super(meineClass, self).__init__(parent, title=title, size=(100,50))
Lasse ich die size-Angaben weg, ist das Frame willkürrlich groß.
Definiere ich die Größe mit "size", dann ist das Frame zwar wie gewünscht nur 50 hoch, jedoch passt sich die Höhe nicht auf 100 an, wenn ich mittels eines Buttons/Events das zweite Panel nachträglich hinzufüge.

Wer kann mir helfen?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ich würde erst einmal damit starten, dass du dich von der absoluten Positionionierung von Elementen verabschiedest.
wxWidgets hat, wie fast alle GUI-Rahmenwerke, ein System zum Layoutmanagement. Benutze das um das Layout deiner GUI zu erstellen. Das hier scheint ein guter Einstieg in das Thema zu sein.
Neu111
User
Beiträge: 69
Registriert: Dienstag 10. März 2020, 19:02

sparrow hat geschrieben: Dienstag 26. Mai 2020, 12:47 Ich würde erst einmal damit starten, dass du dich von der absoluten Positionionierung von Elementen verabschiedest.
Nö, wieso sollte ich?

Das Thema kann übrigens geschlossen werden, ich habe das Problem inzwischen selbst gelöst.

Für die Nachwelt: SetSize
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Hier werden keine Themen geschlossen.

Warum es nicht gut ist, Elemente direkt zu platzieren: Weil Layout-Manager dafür da sind das Layout einer GUI zu managen. wxWidgets ist jetzt nicht das angesagteste Toolkit unter Python und meine Zeit damit ist ein paar Jahre her, aber ich gehe davon aus, dass hier das selbe gilt wie für alle anderen GUI-Frameworks auch: Die Größe von Elementen ist nicht garantiert sondern kann je nach System und Benutzereinstellungen variieren. Ein absolut positioniertes Layout funktioniert dann nicht mehr, weil es optisch kaputt geht. In der Regel sind die Elemente dann nicht mehr vollständig zu sehen.
Deshalb überlässt man das Positionieren dem Manager und beschreibt ihm nur, wie es am Ende aussehen soll.
Antworten