Tutorial PyQt5 com exemplos: Projete GUI usando PyQt em Python
O que รฉ PyQt?
PyQtGenericName รฉ uma ligaรงรฃo python do widget-toolkit de cรณdigo aberto Qt, que tambรฉm funciona como uma estrutura de desenvolvimento de aplicativos multiplataforma. Qt รฉ um popular C++ estrutura para escrever aplicativos GUI para todas as principais plataformas desktop, mรณveis e incorporadas (suporta Linux, Windows, Mac OS, Android, iOS, Raspberry Pi e muito mais).
PyQt รฉ um software livre desenvolvido e mantido pela Riverbank Computing, uma empresa com sede na Inglaterra, enquanto o Qt รฉ desenvolvido por uma empresa finlandesa chamada The Qt Company.
Recursos do PyQT
Aqui estรฃo recursos importantes do PyQt:
Aprenda PyQt, que consiste em mais de seiscentas aulas que abrangem uma variedade de recursos, como
- Interfaces Grรกficas do Usuรกrio
- Bases de Dados SQL
- Kits de ferramentas da web
- processamento de XML
- Networking
Esses recursos podem ser combinados para criar UIs avanรงadas, bem como aplicativos independentes. Muitas grandes empresas de todos os setores usam Qt. Alguns exemplos sรฃo LG, Mercedes, AMD, Panasonic, Harman, etc.
Versรตes PyQt
PyQt estรก disponรญvel em duas ediรงรตes, PyQt4 e PyQt5. PyQt4 fornece cรณdigo cola para vincular as versรตes 4.xe 5.x da estrutura Qt, enquanto PyQt5 fornece uma vinculaรงรฃo apenas para as versรตes 5.x. Como resultado, PyQt5 nรฃo รฉ compatรญvel com versรตes anteriores dos mรณdulos obsoletos da versรฃo mais antiga. Neste tutorial Qt GUI, PyQt5 serรก usado para demonstraรงรฃo de exemplos. Alรฉm dessas duas versรตes,
A Riverbank Computing tambรฉm fornece PyQt3D โ as ligaรงรตes python para a estrutura Qt3D. Qt3D รฉ uma estrutura de aplicaรงรฃo usada para criar sistemas de simulaรงรฃo em tempo real com renderizaรงรฃo 2D/3D.
Como instalar o PyQt5
Neste tutorial do PyQt5, veremos as duas maneiras de instalar o PyQt:
- Usando arquivos Wheel
- Construindo e instalando a partir da fonte
Qt (pronuncia-se cute) รฉ um sistema complexo e a base de cรณdigo PyQt contรฉm compilado C++ e Python cรณdigo sob o capรด. Como resultado, รฉ um processo complicado construir e instalar a partir da fonte em comparaรงรฃo com outras bibliotecas python. No entanto, vocรช pode instalar facilmente o PyQt5 usando wheels.
Instalaรงรฃo com rodas
As rodas sรฃo o novo padrรฃo Python formato de embalagem e distribuiรงรฃo. Simplificando, uma roda รฉ um arquivo ZIP com um nome especial e .enquanto extensรฃo de arquivo. As rodas podem ser instaladas usando pip (Pythongerenciador de pacotes), que estรก incluรญdo por padrรฃo nas versรตes recentes do Python.
Entรฃo, se vocรช tem Python 3.4 ou posterior instalado, vocรช jรก tem o pip. Se, no entanto, vocรช estiver usando uma versรฃo mais antiga do Python, vocรช deve baixar e instalar o pip antes de prosseguir. Vocรช pode procurar instruรงรตes para isso neste link: https://pypi.org/project/pip/.
Para instalar o PyQt5,
Passo 1) Abra o prompt de comando.
Abra o prompt de comando ou PowerShell em seu Windows mรกquina.
Passo 2) Digite o seguinte.
pip install PyQt5
Passo 3) Instalaรงรฃo bem sucedida.
Esta etapa deste tutorial do PyQt5 farรก o download do pacote whl do PyQt5 (cerca de 50 MB) e o instalarรก em seu sistema.
Alternativamente, vocรช tambรฉm pode baixar um Windows binรกrio para a versรฃo do python instalada no seu computador.
Quando estiver concluรญdo, prossiga para a prรณxima seรงรฃo deste tutorial PyQt5 para escrever seu primeiro aplicativo GUI.
PyQt bรกsico Concepts e Programas
Agora que instalou o PyQt5 com sucesso em seu computador, vocรช estรก pronto para escrever Python Aplicativos de design de GUI.
Vamos comeรงar com um aplicativo simples neste tutorial do PyQt5 que exibirรก uma janela vazia na tela.
Ligue seu python IDLE e digite o seguinte:
Programa 1
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_())
Salve-o como app.py (o nome nรฃo importa) e pressione F5 para executar o programa. Alternativamente, basta clicar duas vezes no arquivo salvo para iniciar o aplicativo. Se vocรช fez tudo certo, uma nova janela se abrirรก com o tรญtulo Guru99 conforme mostrado abaixo.
รtimo! Estรก funcionando. Nรฃo รฉ muito, mas รฉ o suficiente para entender o bรกsico. Agora, neste tutorial do PyQt, vamos ver em detalhes o que cada uma das linhas do seu programa faz.
from PyQt5.QtWidgets import QApplication, QWidget
Esta instruรงรฃo importa todos os mรณdulos necessรกrios para criar uma GUI para o namespace atual. O mรณdulo QtWidgets contรฉm todos os principais widgets que vocรช usarรก neste Python Tutorial Qt.
app = QApplication(sys.argv)
Aqui, vocรช estรก criando um objeto da classe QApplication. Esta etapa รฉ uma necessidade para PyQt5; todo aplicativo de UI deve criar uma instรขncia de QApplication, como uma espรฉcie de ponto de entrada no aplicativo. Se vocรช nรฃo criรก-lo, erros serรฃo mostrados.
sys.argv รฉ a lista de parรขmetros de linha de comando que vocรช pode passar para o aplicativo ao iniciรก-lo por meio do shell ou ao automatizar a interface.
Neste exemplo do PyQt5, vocรช nรฃo passou nenhum argumento para QApplications. Portanto, vocรช tambรฉm pode substituรญ-lo pelo cรณdigo abaixo e nem precisar importar o mรณdulo sys.
app = QApplication([])
w = QWidget()
A seguir, criamos um objeto da classe QWidget. QWidget รฉ a classe base de todos os objetos UI no Qt, e praticamente tudo que vocรช vรช em um aplicativo รฉ um widget. Isso inclui caixas de diรกlogo, textos, botรตes, barras e assim por diante. O recurso que permite projetar interfaces de usuรกrio complexas รฉ que os widgets podem ser aninhados, ou seja, vocรช pode ter um widget dentro de um widget, que estรก dentro de outro widget. Vocรช verรก isso em aรงรฃo na prรณxima seรงรฃo.
w.resize(300,300)
O mรฉtodo resize da classe QWidget permite definir as dimensรตes de qualquer widget. Neste caso, vocรช redimensionou a janela para 300px por 300px.
Aqui, vocรช deve lembrar que os widgets podem ser aninhados, o widget mais externo (ou seja, o widget sem pai) รฉ chamado de Janela.
w.setWindowTitle("Guru99")
O mรฉtodo setWindowTitle() permite que vocรช passe uma string como um argumento que definirรก o tรญtulo da janela para a string que vocรช passou. No exemplo PyQt5, a barra de tรญtulo exibirรก Guru99.
w.show()
show() simplesmente exibe o widget na tela do monitor.
sys.exit(app.exec_())
O mรฉtodo app.exec_() inicia o Qt/C++ ciclo de eventos. Como vocรช sabe, PyQt รฉ amplamente escrito em C++ e usa o mecanismo de loop de eventos para implementar a execuรงรฃo paralela. app.exec_() passa o controle para o Qt, que sairรก do aplicativo somente quando o usuรกrio o fechar na GUI. ร por isso que ctrl+c nรฃo sairรก do aplicativo como em outros programas python. Como o Qt tem controle sobre o aplicativo, os eventos python nรฃo sรฃo processados, a menos que os configuremos dentro do aplicativo. Alรฉm disso, observe que o mรฉtodo exec tem um sublinhado em seu nome; isso ocorre porque exec() jรก era uma palavra-chave em python e o sublinhado resolve o conflito de nomenclatura.
Alรฉm das janelas vazias
Na seรงรฃo anterior, vocรช viu como fazer um widget bรกsico no Qt. Agora รฉ hora de criar algumas interfaces mais envolventes com as quais os usuรกrios possam realmente interagir. Mais uma vez, acenda seu IDLE e escreva o seguinte.
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(w)
label.setText("Behold the Guru, Guru99")
label.move(100,130)
label.show()
btn = QPushButton(w)
btn.setText('Beheld')
btn.move(110,150)
btn.show()
btn.clicked.connect(dialog)
w.show()
sys.exit(app.exec_())
Salve o arquivo como appone.py ou qualquer coisa que desejar e pressione F5 para executar o programa. Se vocรช nรฃo cometeu nenhum erro, o IDLE abrirรก uma nova janela com algum texto e um botรฃo conforme mostrado abaixo.
- Depois de clicar no botรฃo da primeira janela, uma nova caixa de mensagem serรก aberta com o texto que vocรช escreveu.
- Agora vocรช pode clicar no botรฃo Ocultar detalhes/Mostrar detalhes para alternar a visibilidade do texto adicional.
Como vocรช pode ver, como nรฃo definimos nenhum tรญtulo de janela na caixa de mensagem, um tรญtulo padrรฃo foi fornecido pelo prรณprio python.
Agora que estรก funcionando, vamos dar uma olhada no cรณdigo extra que vocรช adicionou ao exemplo anterior do PyQt5.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Isso importa mais alguns widgets que vocรช usou nos exemplos do PyQt5, nomeadamente QLabel, QPushButton e 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_()
Aqui, vocรช definiu um mรฉtodo chamado dialog que cria um widget de caixa de mensagem e define algum texto para os botรตes e outros campos.
O mรฉtodo dialog รฉ chamado a partir do bloco principal do programa quando um botรฃo รฉ pressionado em um widget especรญfico (neste caso, o btn PushButton). O evento click acionado nesse botรฃo faz com que esta funรงรฃo seja executada. Essa funรงรฃo รฉ chamada de slot no Qt, e vocรช aprenderรก mais sobre sinais e caรงa-nรญqueis nos prรณximos parรกgrafos.
if __name__ == "__main__":
app = QApplication(sys.argv)
w = QWidget()
w.resize(300,300)
w.setWindowTitle("Guru99")
Esta รฉ a seรงรฃo principal do aplicativo e como no exemplo anterior, vocรช comeรงa criando uma instรขncia de QApplication seguida por um widget simples, ou seja, uma instรขncia de QWidget.
label = QLabel(w)
btn = QPushButton(w)
Vocรช adicionou dois novos widgets neste aplicativo: QLabel e QPushButton. QLabel รฉ usado para imprimir texto nรฃo editรกvel ou espaรงos reservados dentro de um widget, enquanto QPushButton รฉ usado para criar um botรฃo clicรกvel.
O ponto crรญtico a ser observado aqui รฉ que quando vocรช cria os objetos label e btn, vocรช estรก passando o objeto window (w) para os construtores de QLabel e QPushButton. ร assim que o aninhamento funciona no PyQt5. Para criar um widget dentro de outro widget, vocรช passa a referรชncia do widget pai para o construtor filho.
label.move(100,130) btn.move(110,150)
move() รฉ usado para definir a posiรงรฃo de um widget em relaรงรฃo ao seu widget pai. No primeiro caso, o rรณtulo serรก movido 100px da esquerda e 130px do topo da janela.
Da mesma forma, o botรฃo serรก colocado a 110px da esquerda e a 150px do topo da janela. Este exemplo รฉ uma forma rudimentar de obter layouts e geralmente nรฃo รฉ usado na produรงรฃo; ele estรก incluรญdo aqui apenas para fins de aprendizagem. Qt suporta diferentes layouts que vocรช verรก em detalhes nas prรณximas seรงรตes deste tutorial do PyQt.
btn.clicked.connect(dialog)
Finalmente, este รฉ um exemplo de sinais e slots no Qt. Em aplicativos baseados em GUI, as funรงรตes sรฃo executadas com base nas aรงรตes realizadas pelo usuรกrio, como passar o mouse sobre um elemento ou clicar em um botรฃo. Essas aรงรตes sรฃo chamadas semelhantes. Lembre-se de que o mรฉtodo app.exec_() transfere o controle para o Qt evento-laรงo. ร para isso que existe o loop de eventos: para ouvir eventos e executar aรงรตes em resposta.
Sempre que ocorre um evento, como um usuรกrio clicando em um botรฃo, o widget Qt correspondente gera um sinal. Esses sinais podem ser conectados a funรงรตes python (como a funรงรฃo de diรกlogo neste exemplo) para que a funรงรฃo seja executada quando um sinal for acionado. Essas funรงรตes sรฃo chamadas caรงa-nรญqueis na linguagem Qt.
Posteriormente, a sintaxe bรกsica para acionar uma funรงรฃo de slot em resposta ao sinal de um evento รฉ a seguinte
widget.signal.connect(slot)
O que significa que sempre que um sinal รฉ desencadeado por um Widget, o conectado ranhura funรงรฃo serรก executada. Em resumo, sinais e slots sรฃo usados โโpelo Qt para comunicaรงรฃo entre objetos e facilitam a reutilizaรงรฃo e interatividade dos componentes.
Agora que vocรช sabe como aninhar widgets e implementar interaรงรตes usando sinais e slots, aqui estรก uma lista de widgets รบteis e outras classes que vocรช pode usar em seus aplicativos PyQt.
Componentes e widgets
Hรก um grande nรบmero de widgets disponรญveis no PyQt para a criaรงรฃo de aplicativos GUI. No entanto, com o PyQt5, houve uma reorganizaรงรฃo das classes em diferentes mรณdulos e revisรตes nas licenรงas.
Portanto, รฉ crucial ter uma visรฃo de alto nรญvel da estrutura do PyQt5. Nesta seรงรฃo, vocรช verรก como o PyQt5 รฉ organizado internamente e aprenderรก sobre os diferentes mรณdulos, bibliotecas e classes de API fornecidas pelo PyQt5.
Estrutura de diretรณrio PyQt5
Estes sรฃo os mรณdulos fundamentais usados โโpor Pythonda ligaรงรฃo Qt, especificamente PyQt5.
- Qt: Combina todas as classes/mรณdulos mencionados abaixo em um รบnico mรณdulo. Aumenta consideravelmente a memรณria utilizada pela aplicaรงรฃo. No entanto, รฉ mais fรกcil gerenciar a estrutura importando apenas um mรณdulo.
- QtCoreGenericName: contรฉm as principais classes nรฃo grรกficas usadas por outros mรณdulos. ร aqui que o loop de eventos Qt, sinais e conectividade de slot, etc. sรฃo implementados.
- QtWidgets: contรฉm a maioria dos widgets disponรญveis no Pyqt5.
- QtGuiGenericName: Contรฉm componentes GUI e estende o mรณdulo QtCore.
- QtNetwork: Contรฉm classes usadas para implementar programaรงรฃo de rede atravรฉs do Qt. Ele suporta servidores TCP, soquetes TCP, soquetes UDP, manipulaรงรฃo de SSL, sessรตes de rede e pesquisas de DNS.
- Qt Multimรญdia fornece funcionalidade multimรญdia de baixo nรญvel.
- QtSqlGenericName: implementa integraรงรฃo de banco de dados para bancos de dados SQL. Suporta ODBC, MySQL, Oracle, SQLite e PostgreSQL.
Widgets PyQt5
Aqui estรก uma lista dos widgets usados โโcom mais frequรชncia no PyQt5
- QLineEditar: Este รฉ um campo de entrada que permite que uma linha de texto seja inserida pelo usuรกrio.
line = QLineEdit()
- QRadioButton: Este รฉ um campo de entrada com um botรฃo selecionรกvel, semelhante aos botรตes de opรงรฃo em HTML.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- QComboBox: ร usado para exibir um menu suspenso com uma lista de itens selecionรกveis.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- QCheckBox: exibe uma caixa quadrada selecionรกvel na frente do rรณtulo que serรก marcado se selecionado, semelhante aos botรตes de opรงรฃo.
check = QCheckBox("button title")
- QMenuBar: exibe uma barra de menu horizontal na parte superior de uma janela. Vocรช sรณ pode adicionar objetos da classe QMenu a esta barra. Esses objetos QMenu podem conter ainda strings, objetos QAction ou outros objetos QMenu.
- QToolBarName: ร uma barra ou painel horizontal que pode ser movido dentro da janela. Pode conter botรตes e outros widgets.
- QTab: รฉ usado para dividir o conteรบdo de uma janela em mรบltiplas pรกginas que podem ser acessadas atravรฉs de diferentes abas na parte superior do widget. Consiste em duas seรงรตes: a barra de guias e a pรกgina de guias.
- QScrollBar: ร usado para criar barras de rolagem que permitem ao usuรกrio rolar para cima e para baixo em uma janela. Consiste em um controle deslizante mรณvel, uma trilha deslizante e dois botรตes para rolar o controle deslizante para cima ou para baixo.
scroll = QScrollBar()
- QSplitter: Divisores sรฃo usados โโpara separar o conteรบdo de uma janela para que os widgets sejam agrupados corretamente e nรฃo pareรงam desordenados. QSplitter รฉ um dos principais manipuladores de layout disponรญveis no PyQt5 e รฉ usado para dividir o conteรบdo horizontal e verticalmente.
- QDock: um widget de encaixe รฉ uma subjanela com duas propriedades:
- Ele pode ser movido dentro da janela principal e
- Ele pode ser encaixado fora da janela principal em outro local da tela.
Layouts e Temas
Nos exemplos anteriores do PyQt5, vocรช usou apenas os mรฉtodos move() e resize() para definir as posiรงรตes dos widgets em sua GUI.
No entanto, PyQt possui um mecanismo robusto de gerenciamento de layout que pode ser usado para criar interfaces de usuรกrio avanรงadas para aplicativos. Nesta seรงรฃo, vocรช aprenderรก sobre duas classes importantes usadas no Qt para criar e gerenciar layouts.
- QBoxtraรงado
- QGridLayout
QBoxtraรงado
QBoxLayout รฉ usado para alinhar os widgets filhos do layout em uma linha horizontal ou vertical. As duas classes de interesse que herdam de QBoxDisposiรงรฃo sรฃo:
- QHBoxLayout: usado para alinhar os widgets filhos horizontalmente.
- QVBoxLayout: usado para alinhar os widgets filhos verticalmente.
Por exemplo, รฉ assim que trรชs botรตes alinhados com QHBoxO layout ficarรก.
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
w.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(w)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
w.show()
sys.exit(app.exec_())
E รฉ assim que eles ficarรฃo no QVBoxLayout.
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
w.setWindowTitle("Musketeers")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
vb = QVBoxLayout(w)
vb.addWidget(btn1)
vb.addWidget(btn2)
vb.addWidget(btn3)
w.show()
sys.exit(app.exec_())
A รบnica funรงรฃo que precisa de explicaรงรฃo neste momento รฉ o mรฉtodo addWidget(). ร usado para inserir widgets no HBox ou VBox layout. Tambรฉm รฉ usado em outros layouts onde รฉ necessรกrio um nรบmero diferente de parรขmetros, como vocรช verรก na prรณxima seรงรฃo. Os widgets aparecerรฃo dentro do layout na ordem em que vocรช os inserir.
QGridLayout
QGridLayout รฉ usado para criar interfaces nas quais os widgets sรฃo dispostos na forma de uma grade (como uma matriz ou array 2D). Para inserir elementos em um layout de grade, vocรช pode usar a representaรงรฃo matricial para definir o nรบmero de linhas e colunas na grade, bem como a posiรงรฃo desses elementos.
Por exemplo, para criar uma grade 3*3 (ou seja, uma grade com trรชs linhas e trรชs colunas), vocรช escreverรก o seguinte cรณdigo:
Import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
grid = QGridLayout(w)
for i in range(3):
for j in range(3):
grid.addWidget(QPushButton("Button"),i,j)
w.show()
sys.exit(app.exec_())
Esta serรก a saรญda:
O mรฉtodo addWidget() no layout da grade recebe estes argumentos:
- O objeto widget que vocรช deseja adicionar ร grade
- A coordenada x do objeto
- A coordenada y do objeto
- O intervalo de linha (padrรฃo =0)
- O col-span (padrรฃo = 0)
Para entender melhor, vocรช pode inserir manualmente cada widget conforme mostrado abaixo
import sys
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication([])
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(QPushButton("Button one"),0,0)
grid.addWidget(QPushButton("Button two"),0,1)
grid.addWidget(QPushButton("Button three"),1,0)
grid.addWidget(QPushButton("Button four"),1,1)
w.show()
sys.exit(app.exec_())
Esta รฉ a aparรชncia da grade:
Vocรช tambรฉm pode passar os parรขmetros rowspan e colspan para addWidget() para abranger mais de uma linha ou coluna.
Por exemplo, nos
grid.addWidget(QPushButton("Button five"),2,0,1,0)
Isso criarรก um botรฃo que se estende por ambas as colunas.
Temas
PyQt5 vem com alguns temas integrados que vocรช pode usar em seus aplicativos. O setEstilo() O mรฉtodo chamado na instรขncia QApplication รฉ usado para definir um tema especรญfico para seu aplicativo.
Por exemplo, adicionar a seguinte linha de cรณdigo alterarรก o tema do seu aplicativo do padrรฃo para Fusion
app.setStyle("Fusion")
ร assim que o exemplo anterior ficarรก no Fusion Theme
Outra funรงรฃo รบtil para definir temas para seus aplicativos รฉ o mรฉtodo setPalette(). Aqui estรก o cรณdigo para alterar a cor de diferentes widgets usando setPalette().
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette
if __name__ == "__main__":
app = QApplication([])
app.setStyle("Fusion")
qp = QPalette()
qp.setColor(QPalette.ButtonText, Qt.black)
qp.setColor(QPalette.Window, Qt.black)
qp.setColor(QPalette.Button, Qt.gray)
app.setPalette(qp)
w = QWidget()
grid = QGridLayout(w)
grid.addWidget(QPushButton("Button one"),0,0)
grid.addWidget(QPushButton("Button two"),0,1)
grid.addWidget(QPushButton("Button three"),1,0)
grid.addWidget(QPushButton("Button four"),1,1)
w.show()
sys.exit(app.exec_())
Aqui estรก o resultado.
Para usar o mรฉtodo setPalette(), primeiro vocรช precisa definir uma paleta. Isso รฉ feito criando um objeto da classe QPalette.
qp = QPalette()
Observe que a classe QPalette pertence ao mรณdulo QtGui e vocรช precisarรก importรก-la para que isso funcione. Depois de criar o objeto QPalette, use o mรฉtodo setColor() para passar o nome de um widget cuja cor vocรช deseja alterar e a cor que deseja definir.
qp.setColor(QPalette.Window, Qt.black)
Isso mudarรก a cor da janela para preto. Depois de definir seu esquema de cores, use a funรงรฃo setPalette() para aplicar a paleta ao seu aplicativo.
app.setPalette(qp)
Isso รฉ tudo que vocรช precisa fazer se quiser criar alguns temas bรกsicos para seu aplicativo. PyQt tambรฉm permite usar folhas de estilo para definir a aparรชncia de seus widgets. Se vocรช estiver familiarizado com CSS, poderรก definir facilmente estilos avanรงados para seu aplicativo usando Qt Style Sheets.
Resumo
- PyQt รฉ a ligaรงรฃo python para o C++ Estrutura de interface do usuรกrio, Qt.
- PyQt4 e PyQt5 sรฃo as duas versรตes principais desenvolvidas pela Riverbank Computing.
- Os principais mรณdulos do framework PyQt sรฃo:
- Qt
- QtCoreGenericName
- QtWidgets
- QtGuiGenericName
- QtSqlGenericName
- QtNetwork
- PyQt oferece suporte a vรกrios widgets como:
- botรตes
- Etiquetas de texto
- Campos de texto
- Botรตes de rรกdio e caixas de seleรงรฃo
- Barras de ferramentas e barras de menu
- kit web
- Tabs
- Docas
- No PyQt, a interatividade รฉ implementada usando sinais e ranhuras.
- An evento รฉ uma aรงรฃo executada por um usuรกrio na GUI (como clicar em um botรฃo).
- A sinal รฉ gerado pelo widget correspondente quando ocorre um evento nele.
- A ranhura รฉ uma funรงรฃo que estรก conectada ao sinal e รฉ executada quando o sinal รฉ aumentado.
- PyQt possui um mecanismo de layout robusto e oferece suporte a design e gerenciamento avanรงados de layout. Estes sรฃo dois esquemas de layout usados โโcom frequรชncia no PyQt:
- Box traรงado
- Layout de grade
- O designer PyQt permite criar temas personalizados para aplicativos GUI e possui suporte integrado para folhas de estilo.
- qtcreator Python pode ser usado para criar interfaces de usuรกrio, bem como aplicativos independentes.












