PyQt QGridLayout

Resumo : neste tutorial, você aprenderá como usar PyQt QGridLayoutpara organizar widgets em linhas e colunas uniformes.

Introdução ao PyQt QGridLayout

O QGridLayoutpermite colocar widgets em linhas e colunas uniformes de uma grade. Por exemplo, a imagem a seguir mostra uma grade que consiste em quatro colunas e três linhas:

PyQt QGridLayout

Linhas e colunas são indexadas com base em zero . Isso significa que a primeira linha tem índice zero, a segunda linha tem índice um e assim por diante. Da mesma forma, a primeira coluna tem um índice zero, a segunda coluna tem um índice um, etc.

A interseção entre uma linha e uma coluna é chamada de célula . Uma célula é um espaço onde você pode colocar um widget.

Linhas e colunas podem abranger. Por exemplo, a imagem a seguir ilustra que a segunda coluna da primeira linha abrange duas colunas e a segunda linha da segunda coluna abrange duas linhas:

PyQt QGridLayout - extensão de linha e coluna

Se um widget ocupar menos espaço que a célula que o contém, você poderá alinhá-lo dentro da célula usando uma das seguintes opções de alinhamento:

Sinalizador de alinhamento Significado
AlignAbsolute Se a direção for da esquerda para a direita, as AlignLeftmédias se alinham com a borda direita . Porém, se quiser AlignLeftestar sempre alinhado com a borda esquerda, você pode combinar AlignLeftcom a AlignAbsoluteopção.
AlignBaseline Alinhe o widget com a linha de base.
AlignBottom Alinhe o widget com a borda inferior.
AlignCenter Centraliza o widget em ambas as dimensões.
AlignHCenter Centraliza o widget horizontalmente no espaço disponível.
AlignHorizontal_Mask AlignLeft | AlignRight | AlignHCenter | AlignJustify | AlignAbsolute
AlignJustify Justifica o texto no espaço disponível.
AlignLeft Alinhe o widget com a borda esquerda.
AlignRight Alinhe o widget com a borda direita.
AlignTop Alinhe o widget com a borda superior.
AlignVCenter Centraliza o widget verticalmente no espaço disponível.
AlignVertical_Mask AlignTop | AlignBottom | AlignVCenter | AlignBaseline

Usando um QGridLayout

Para usar o QGridLayout, você segue estas etapas:

Primeiro, crie um QGridLayoutobjeto:

layout = QGridLayout()Linguagem de código:  Python  ( python )

Segundo, defina o layout do widget pai:

parent.setLayout(layout)Linguagem de código:  Python  ( python )

Terceiro, coloque os widgets filhos no layout da grade:

layout.addWidget(widget, row, column, rowSpan, columnSpan, alignment)Linguagem de código:  Python  ( python )

Nesta sintaxe:

  • widgeté um widget filho que você deseja colocar na grade.
  • rowé um índice de linha que começa em 0.
  • columné um índice de coluna que começa em 0.
  • rowSpané o número de linhas que você deseja abranger.
  • columnSpané o número de colunas que você deseja abranger.
  • alignmentespecifica o alinhamento do widget dentro da célula.

Para obter o valor do alinhamento, você importa Qtde PyQt6.QtCore:

from PyQt6.QtCore import QtLinguagem de código:  Python  ( python )

e use um dos valores do Qt. AlignmentFlagenum, por exemplo:

Qt.AlignmentFlag.AlignRightLinguagem de código:  Python  ( python )

Exemplo PyQt QGridLayout

O exemplo a seguir mostra como criar um formulário de login usando QGridLayout:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Login Form')

        # set the grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # username
        layout.addWidget(QLabel('Username:'), 0, 0)
        layout.addWidget(QLineEdit(), 0, 1)

        # password
        layout.addWidget(QLabel('Password:'), 1, 0)
        layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)

        # buttons
        layout.addWidget(QPushButton('Log in'), 2, 0,
                         alignment=Qt.AlignmentFlag.AlignRight)
        layout.addWidget(QPushButton('Close'), 2, 1,
                         alignment=Qt.AlignmentFlag.AlignRight)

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())
Linguagem de código:  Python  ( python )

Saída:

Exemplo PyQt QGridLayout

Como funciona.

Primeiro, crie um QGridLayoutobjeto:

layout = QGridLayout()
self.setLayout(layout)Linguagem de código:  Python  ( python )

Segundo, coloque um QLabelna célula (0,0) e QLineEditna célula (0,1) para criar o usernamecampo:

layout.addWidget(QLabel('Username:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)Linguagem de código:  Python  ( python )

Terceiro, coloque um QLabelna célula (1,0) e QLineEditna célula (1,1) para criar o passwordcampo:

layout.addWidget(QLabel('Password:'), 1, 0)
layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)Linguagem de código:  Python  ( python )

Por fim, coloque um botão de login na célula (2,0) e alinhe-o com a borda esquerda. Além disso, coloque o botão Fechar na célula (2,1) e alinhe-o com a borda direita.

# buttons
layout.addWidget(QPushButton('Log in'), 2, 0,
                 alignment=Qt.AlignmentFlag.AlignRight)
layout.addWidget(QPushButton('Close'), 2, 1,
                 alignment=Qt.AlignmentFlag.AlignRight)Linguagem de código:  Python  ( python )

Resumo

  • Use PyQt QGridLayoutpara organizar widgets em linhas e colunas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *