Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Tutorial Abrangente de PyQt5: Construa GUIs Profissionais em Python

O que é PyQt?

PyQt é um binding Python para o framework Qt, uma biblioteca C++ multiplataforma usada para criar aplicações GUI nativas no Windows, macOS, Linux, Android, iOS, Raspberry Pi e mais. O binding é mantido pela Riverbank Computing (UK), enquanto o Qt em si é desenvolvido pela The Qt Company (Finlândia). PyQt dá desenvolvedores Python acesso ao rico conjunto de widgets, rede, banco de dados, 3D e capacidades multimídia do Qt.

Neste tutorial você aprenderá:

Principais Recursos do PyQt5

PyQt5 expõe mais de 600 classes que cobrem:

Essas capacidades permitem desenvolvedores construir aplicações desktop e embarcadas complexas e de alta performance. Grandes corporações como LG, Mercedes-Benz, AMD, Panasonic e Harman confiam no Qt para suas stacks de UI.

Versões do PyQt

Riverbank Computing oferece dois bindings principais:

Adicionalmente, PyQt3D fornece bindings Python para o framework Qt3D, útil para renderização 3D em tempo real e simulação.

Instalando PyQt5

Dois métodos comuns de instalação são descritos abaixo. Recomendamos usar pacotes wheel porque incluem binários C++ compilados e evitam processos de build longos.

Método 1: Instalação via Wheels (Recomendado)

  1. Abra seu terminal ou prompt de comando preferido.
  2. Execute pip install PyQt5 para baixar o wheel (≈ 50 MB).
  3. Verifique se a instalação completa com sucesso.

Exemplo no Windows:

Tutorial Abrangente de PyQt5: Construa GUIs Profissionais em Python
pip install PyQt5

Uma vez instalado, você pode importar PyQt5.QtWidgets e começar a construir aplicações.

Método 2: Build from Source

Build from source é mais complexo porque compila código C++. É apenas necessário se você precisar de modificações customizadas ou o wheel para sua plataforma estiver indisponível.

Fundamentos da Programação PyQt5

Abaixo está um exemplo mínimo que abre uma janela 300x300 titulada "Guru99". Cada linha é anotada para clareza.

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Explicação:

Adicionando Interatividade

O exemplo a seguir adiciona um label, um botão e uma message box que aparece quando o botão é clicado. Demonstra signals e slots, o núcleo do sistema de eventos do Qt.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("Behold the Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Beheld", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

Clicar no botão dispara dialog(), que cria um QMessageBox modal.

Componentes Centrais e Widgets

A arquitetura do PyQt5 é organizada em vários módulos. Entender esta hierarquia ajuda você a importar apenas o que precisa.

Visão Geral dos Módulos

Widgets Comuns

Gerenciamento de Layout

Em vez de posicionar widgets manualmente com move() e resize(), o Qt oferece gerenciadores de layout que organizam widgets automaticamente baseados no tamanho da janela.

Box Layouts (HBox & VBox)

QHBoxLayout organiza widgets horizontalmente; QVBoxLayout verticalmente.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

Substitua QHBoxLayout por QVBoxLayout para empilhar botões verticalmente.

Grid Layout

Organize widgets em grade 2D. O método addWidget() aceita índices de linha e coluna mais argumentos opcionais de row-span e column-span.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Button {i},{j}"), i, j)
win.show()
app.exec_()

Temas e Estilos Customizados

PyQt5 suporta temas nativos e stylesheets customizados.

Temas Embutidos

Defina o estilo da aplicação com app.setStyle("Fusion") ou qualquer outro estilo disponível.

app = QApplication([])
app.setStyle("Fusion")

Personalização de Paleta

Use QPalette para modificar cores de widgets programaticamente.

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt Style Sheets (CSS-like)

Para estilização avançada, aplique stylesheets diretamente em widgets ou na aplicação inteira.

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

Principais Conclusões

python

  1. Dominando Collections em C#: Tutorial Prático com Exemplos do Mundo Real
  2. Domine o str.count() do Python: Como Contar Caracteres e Substrings com Exemplos
  3. Domine Strings format() em Python com Exemplos Claros
  4. Domine o Método String.find() do Python: Sintaxe, Exemplos e Alternativas
  5. Dominando Funções Lambda em Python: Exemplos Práticos e Boas Práticas
  6. Função round() em Python Explicada com Exemplos Práticos
  7. Dominando a Função map() do Python: Sintaxe, Exemplos e Boas Práticas
  8. Python timeit(): Medindo Tempo de Execução com Exemplos Práticos
  9. Counter do Python em collections: Contagem Eficiente, Atualização e Operações Aritméticas
  10. Entendendo type() e isinstance() em Python: Exemplos Práticos