Dieses Tutorial bietet eine umfassende Anleitung zur Verwendung des leistungsstarken QGridLayout
von PyQt5 zum Erstellen flexibler und organisierter Benutzeroberflächen. Wir behandeln die Grundlagen, fortgeschrittene Techniken wie das Überspannen von Zellen und die Steuerung der Widget-Dehnung und bieten praktische Beispiele, um Ihr Verständnis zu festigen.
Inhaltsverzeichnis
- Grundlegende Verwendung von QGridLayout
- Mehrere Zellen überspannen
- Steuerung der Widget-Dehnung
- Fortgeschrittene Techniken und Überlegungen
1. Grundlegende Verwendung von QGridLayout
Das QGridLayout
ordnet Widgets in einem Raster aus Zeilen und Spalten an. Jedes Widget belegt standardmäßig eine einzelne Zelle. Beginnen wir mit einem einfachen Beispiel:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Beispiel")
layout = QGridLayout()
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
button3 = QPushButton("Button 3")
button4 = QPushButton("Button 4")
layout.addWidget(button1, 0, 0) # Zeile 0, Spalte 0
layout.addWidget(button2, 0, 1) # Zeile 0, Spalte 1
layout.addWidget(button3, 1, 0) # Zeile 1, Spalte 0
layout.addWidget(button4, 1, 1) # Zeile 1, Spalte 1
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Dies erzeugt ein 2×2-Raster von Schaltflächen. addWidget(widget, row, column)
fügt ein Widget zur angegebenen Zeile und Spalte hinzu (nullbasierte Indizierung).
2. Mehrere Zellen überspannen
Um ein Widget mehrere Zeilen oder Spalten überspannen zu lassen, verwenden Sie addWidget(widget, row, column, rowspan, colspan)
. rowspan
und colspan
definieren die Anzahl der Zeilen und Spalten, die das Widget einnimmt.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Span Beispiel")
layout = QGridLayout()
label = QLabel("Dieses Label überspannt zwei Spalten")
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
layout.addWidget(label, 0, 0, 1, 2) # Überspannt zwei Spalten
layout.addWidget(button1, 1, 0)
layout.addWidget(button2, 1, 1)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
Hier überspannt das Label zwei Spalten.
3. Steuerung der Widget-Dehnung
Standardmäßig werden Widgets auf ihre minimale Größe skaliert. Um zu steuern, wie Widgets erweitert werden, um den verfügbaren Platz auszufüllen, verwenden Sie setColumnStretch(column, stretch)
und setRowStretch(row, stretch)
. Ein höherer Stretch-Faktor bedeutet, dass das Widget einen proportional größeren Anteil des verfügbaren Platzes einnimmt.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("PyQt5 Grid Layout Stretch Beispiel")
layout = QGridLayout()
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.setColumnStretch(1, 2) # Spalte 1 dehnt sich doppelt so stark wie Spalte 0
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
button2
nimmt nun die doppelte horizontale Fläche von button1
ein.
4. Fortgeschrittene Techniken und Überlegungen
Für komplexere Layouts sollten Sie Folgendes in Betracht ziehen:
addLayout()
: Einbetten anderer Layouts in einQGridLayout
für verschachtelte Strukturen.- Ausrichtung: Verwenden Sie
setAlignment()
, um die Ausrichtung von Widgets in ihren Zellen zu steuern. - Abstand: Passen Sie den Abstand zwischen Zeilen und Spalten mit
setVerticalSpacing()
undsetHorizontalSpacing()
an. - Ränder: Steuern Sie die Ränder um das gesamte Raster mit
setContentsMargins()
.
Die Beherrschung dieser Techniken ermöglicht es Ihnen, anspruchsvolle und hochgradig anpassungsfähige PyQt5-Oberflächen zu erstellen.