797
28.18
Das Qt-Layout unter der Lupe
Das Raster muss nicht explizit definiert werden. Es entsteht gewissermaßen »von allein«
durch die
addWidget()-Operation. Sie kann mit drei oder fünf Argumenten aufgerufen
werden. Beim Aufruf mit fünf Argumenten kann ein Bereich definiert werden, der über
mehrere Zeilen und/oder Spalten geht. Abbildung 28.21 zeigt den Programmcode für das
Beispiel-Layout.
Abb. 28.21: Programmierung eines Raster-Layouts
28.18.3 Form-Layout
Beim Form-Layout wird das Anwendungsfenster zeilenweise aufgebaut. Beispiel:
Erster Zeile: Eingabefeld und Schaltfläche
Zweite Zeile: Viewer
Abb. 28.22: Browser mit Form-Layout und Standard-Policy
# Layout
form = QFormLayout()
self.setLayout(form)
form.addRow(self.addressBar, self.searchButton)
form.addRow(self.webView)
form.setSpacing(10)
Kapitel 28
Benutzungsoberflächen mit Qt
798
Warum ist die Schaltfläche so lang? Das liegt an den voreingestellten Regeln zur dynami-
schen Anpassung von Größe und Position der Widgets, den so genannten Policies. Eine vor-
eingestellte Regel besagt, dass Widgets sich der jeweiligen Zelle anpassen. Mit der
folgenden Anweisung behält der Button seine Maße, auch wenn das Anwendungsfenster
vergrößert wird.
Die Methode
addRow() kann in folgenden Formaten aufgerufen werden (in Klammern sind
die Typen der Parameter angegeben):
Sie verwenden das Form-Layout vor allem dann, wenn das Anwendungsfenster den Charak-
ter eines Eingabe-Formulars (engl. form) hat. Ein Vorteil ist, dass die Reihen des Formulars
auch Text enthalten können, für den Sie nicht noch zusätzlich ein
QLabel-Widget definieren
müssen. Voreingestellt ist, dass die Labels linksbündig sind. Mit
setLabelAlignment()
können Labels rechtsbündig gesetzt werden. Abbildung 28.23 zeigt ein Beispiel. Links sieht
man ein Formular in der vorgegebenen Standardeinstellung. Die Eingabefelder passen sich
in der Breite der Zellengröße an. Wenn man das Fenster breiter macht, werden auch die Ein-
gabefelder breiter. Rechts ist das Layout abgewandelt.
Abb. 28.23: Form-Layout in der Standardeinstellung (links) und abgewandelt (rechts)
Skript:
form.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)
QFormLayout.addRow(QWidget, QWidget)
QFormLayout.addRow(QWidget, QLayout)
QFormLayout.addRow(str, QWidget)
QFormLayout.addRow(str, QLayout)
QFormLayout.addRow(QWidget)
QFormLayout.addRow(QLayout)
# addresses.py
import sys

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.