PyQt5 Tutorials

PyQt5 QGridLayout meistern: Ein umfassendes Tutorial

Spread the love

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

  1. Grundlegende Verwendung von QGridLayout
  2. Mehrere Zellen überspannen
  3. Steuerung der Widget-Dehnung
  4. 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 ein QGridLayout 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() und setHorizontalSpacing() 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert