Dominando a Aparência do QComboBox com PyQt5 e Stylesheets

Por Mizael Xavier
Dominando a Aparência do QComboBox com PyQt5 e Stylesheets

Introdução à Customização de Widgets PyQt5

O PyQt5, um robusto conjunto de bindings Python para o framework Qt, é amplamente utilizado para criar interfaces gráficas de usuário (GUIs) ricas e funcionais. Dentro de sua vasta biblioteca de widgets, o QComboBox se destaca como um componente essencial, permitindo aos usuários selecionar uma opção a partir de uma lista suspensa. Embora sua funcionalidade padrão seja clara, a aparência visual pode precisar de ajustes para se alinhar à identidade visual de uma aplicação ou para melhorar a experiência do usuário (UX).

É aqui que entram as Qt Style Sheets (QSS). De forma análoga ao CSS para desenvolvimento web, as QSS oferecem um mecanismo poderoso para controlar a aparência dos widgets Qt, incluindo o QComboBox. Utilizando QSS, é possível modificar cores, bordas, preenchimento, fontes e até mesmo substituir elementos gráficos como a seta do drop-down.

Entendendo Qt Style Sheets (QSS) para QComboBox

A sintaxe das Qt Style Sheets é intencionalmente similar à do CSS, tornando-a familiar para desenvolvedores web. Uma regra QSS básica consiste em um seletor e uma declaração. O seletor define qual(is) widget(s) a regra afetará, e a declaração, entre chaves {}, contém pares de propriedade: valor; que definem os estilos a serem aplicados.

Por exemplo: QComboBox { background-color: #f0f0f0; color: black; border: 1px solid gray; }

Este exemplo aplica um fundo cinza claro, texto preto e uma borda cinza a todas as instâncias de QComboBox e suas subclasses na aplicação. As QSS suportam diversos tipos de seletores:

  • Type Selector: Seleciona todas as instâncias de uma classe específica (e subclasses), como QComboBox.
  • ID Selector: Seleciona uma instância específica de widget que teve seu objectName definido. Se um QComboBox tem setObjectName("meuCombo"), pode ser estilizado com #meuCombo { ... }.
  • Selectors de Sub-Controles: Permitem estilizar partes específicas de um widget complexo, como a seta ou a lista suspensa do QComboBox.

Para aplicar QSS em PyQt5, você pode usar o método setStyleSheet() do widget específico ou aplicá-lo globalmente à instância da aplicação (QApplication).

Customizando o QComboBox: Seletores Essenciais e Propriedades

Para customizar efetivamente um QComboBox, é crucial conhecer os seletores específicos para suas diferentes partes.

Estilizando o QComboBox Principal

O seletor de tipo QComboBox estiliza a caixa principal do widget.

Seletor: QComboBox

Propriedades Comuns:

  • background-color: Cor de fundo.
  • color: Cor do texto do item selecionado.
  • border: Define a borda (espessura, estilo, cor).
  • border-radius: Arredonda os cantos da borda.
  • padding: Espaçamento interno.
  • height: Altura do componente.

Exemplo QSS: QComboBox { border: 1px solid #cccccc; border-radius: 4px; padding-left: 10px; background-color: white; height: 28px; }

Modificando o Botão Drop-down (Área da Seta)

Esta área contém a seta que abre a lista suspensa.

Seletor: QComboBox::drop-down

Propriedades Comuns:

  • subcontrol-origin: Define a referência para a posição (geralmente padding).
  • subcontrol-position: Posiciona o sub-controle (ex: top right).
  • width: Largura da área da seta.
  • border: Borda específica para esta área.
  • border-top-right-radius, border-bottom-right-radius: Para combinar com o arredondamento do QComboBox principal.

Exemplo QSS: QComboBox::drop-down { border: none; subcontrol-origin: padding; subcontrol-position: top right; width: 20px; }

Alterando a Seta Drop-down

É possível substituir a seta padrão por uma imagem customizada.

Seletor: QComboBox::down-arrow

Propriedades Comuns:

  • image: Caminho para o arquivo de imagem da seta (ex: url(caminho/para/seta.png)).
  • width, height: Dimensões da imagem da seta.

Também é possível ajustar a seta quando a lista está aberta usando o pseudo-estado :on.

Seletor Estado Aberto: QComboBox::down-arrow:on

Exemplo QSS: QComboBox::down-arrow { image: url(icons/arrow-down.svg); width: 12px; height: 12px; } QComboBox::down-arrow:on { image: url(icons/arrow-up.svg); /* Pode mudar a imagem ou posição */ }

Personalizando a Lista Suspensa (Popup)

A lista que aparece ao clicar no QComboBox é, na verdade, um `QAbstractItemView` (frequentemente um `QListView`), e pode ser estilizada separadamente.

Seletor para a View: QComboBox QAbstractItemView ou QComboBox QListView

Propriedades Comuns (View):

  • background-color: Cor de fundo da lista.
  • border: Borda da lista suspensa.
  • selection-background-color: Cor de fundo do item selecionado (quando navegado pelo teclado/mouse hover, não necessariamente o item *atual* do QComboBox).

Seletor para os Itens: QComboBox QListView::item

Propriedades Comuns (Item):

  • padding: Espaçamento interno dos itens.
  • height: Altura de cada item.
  • color: Cor do texto dos itens.

Seletor Item Hover: QComboBox QListView::item:hover

Exemplo QSS: QComboBox QListView { background-color: white; border: 1px solid #cccccc; outline: 0px; /* Remove foco visual indesejado */ } QComboBox QListView::item { padding: 5px 10px; height: 25px; } QComboBox QListView::item:selected { background-color: #e0e0e0; color: black; } QComboBox QListView::item:hover { background-color: #f5f5f5; }

Nota Importante: Estilizar o item que corresponde à seleção *atual* do QComboBox dentro da lista suspensa pode ser complexo apenas com QSS. Para essa finalidade específica, usar um `QStyledItemDelegate` customizado costuma ser uma abordagem mais robusta e recomendada.

Dicas e Boas Práticas para Estilizar QComboBox

  • Comente seu QSS: Facilita a manutenção e compreensão do código de estilos.
  • Teste Multiplataforma: A renderização pode variar ligeiramente entre sistemas operacionais. Teste sua aplicação se a consistência visual for crítica.
  • Consulte a Documentação Oficial do Qt: É a fonte mais completa e confiável para todos os seletores, sub-controles, pseudo-estados e propriedades disponíveis.
  • Use Qt Designer: Para prototipar e testar estilos visualmente antes de implementá-los no código.
  • Organização: Para estilos complexos, considere carregar QSS de arquivos `.qss` externos em vez de strings longas no código Python.

Conclusão

Customizar a aparência do QComboBox com Qt Style Sheets em PyQt5 é uma maneira eficaz de aprimorar a estética e a usabilidade das suas aplicações desktop. Ao compreender os seletores específicos — QComboBox, ::drop-down, ::down-arrow, QListView, e QListView::item — e as propriedades QSS, você ganha controle granular sobre cada aspecto visual deste widget. Embora haja nuances, como a estilização do item atualmente selecionado na lista, as QSS oferecem flexibilidade imensa para criar interfaces que não são apenas funcionais, mas também visualmente coesas e atraentes.

Mizael Xavier

Mizael Xavier

Desenvolvedor e escritor técnico

Ver todos os posts

Compartilhar: