Resumo : neste tutorial, você aprenderá como usar PyQt QGridLayout
para organizar widgets em linhas e colunas uniformes.
Introdução ao PyQt QGridLayout
O QGridLayout
permite 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:
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:
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 AlignLeft médias se alinham com a borda direita . Porém, se quiser AlignLeft estar sempre alinhado com a borda esquerda, você pode combinar AlignLeft com a AlignAbsolute opçã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 |
|
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 |
|
Usando um QGridLayout
Para usar o QGridLayout
, você segue estas etapas:
Primeiro, crie um QGridLayout
objeto:
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.alignment
especifica o alinhamento do widget dentro da célula.
Para obter o valor do alinhamento, você importa Qt
de PyQt6.QtCore
:
from PyQt6.QtCore import Qt
Linguagem de código: Python ( python )
e use um dos valores do Qt. AlignmentFlag
enum, por exemplo:
Qt.AlignmentFlag.AlignRight
Linguagem 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:
Como funciona.
Primeiro, crie um QGridLayout
objeto:
layout = QGridLayout()
self.setLayout(layout)
Linguagem de código: Python ( python )
Segundo, coloque um QLabel
na célula (0,0) e QLineEdit
na célula (0,1) para criar o username
campo:
layout.addWidget(QLabel('Username:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)
Linguagem de código: Python ( python )
Terceiro, coloque um QLabel
na célula (1,0) e QLineEdit
na célula (1,1) para criar o password
campo:
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
QGridLayout
para organizar widgets em linhas e colunas.