Azimlib0.3.0 · documentation

Toolbar: contratos Tk e verificação visual

Outputs under gallery/ are local generated previews, not distributed assets. For versioned current images, see the 0.3 gallery.

A auditoria do passo 3 encontrou e corrigiu diferenças na toolbar:

Referência: widgets reais das duas bibliotecas em 96/120/144/192 DPI de escala Tk. Tipos, dimensões pedidas, fontes, hover e sequência de seleção Pan/Zoom coincidem nos estados medidos; hover plano é uma diferença de apresentação documentada. Isso usa Tk 8.6/Windows e Matplotlib 3.11.2 no ambiente separado de desenvolvimento.

Local preview: Ícones originais da Azimlib (gallery/toolbar-icon-assets.png, generated locally)

A imagem contém apenas os PhotoImages gerados pela Azimlib, não é uma screenshot de janela. Os símbolos têm função/proporções familiares, mas são construídos a partir de polígonos, elipses e retângulos definidos por nós. Diferenças de tema/widget ainda requerem conferência visual. Matplotlib é somente referência no ambiente separado de desenvolvimento.

Há quatro regressões sem janela/Matplotlib em tests/test_toolbar.py, três regressões de limites/exportação em tests/test_subplot_editor.py, cinco regressões próprias de assets/SVG/alpha/simetria e 28 checks com Tk real e janelas ocultas em source/wheel. O smoke testa widgets, estados, cursor nos handlers, nomes opcionais, editor e fechamento; não entrada física.

Nomes e editor Subplots

A toolbar padrão do Matplotlib mostra ícones com nomes/dicas no hover. A Azimlib mantém esse padrão e oferece nomes permanentes opcionais:

viewer = fig.show(block=False)
viewer.set_toolbar_labels(True)  # False restaura apenas os ícones

O editor foi reconstruído com widgets ttk e grupos Borders/Spacings, tomando o diálogo Qt instalado como referência de organização. Sliders e campos numéricos permitem edição ao vivo; limites relacionados preservam left < right e bottom < top. Reset restaura uma cópia dos valores iniciais; Tight layout recalcula a composição; Export values fornece código fig.subplots_adjust() copiável. Um único diálogo é reutilizado e pode ser reaberto após fechar. Layout automático incompatível desativa ajustes manuais, com explicação; Tight layout permite mudar para o modo ajustável. O toolkit continua Tk/ttk, sem exigir Qt no runtime. Não se promete que Tk reproduza a decoração nativa Qt.

Reproduzir

Com .[gui] instalado:

python tools/smoke_toolbar_tk.py --output toolbar-check.json
python tools/show_viewer_comparison.py --library azimlib --labels --subplots

No ambiente separado com Matplotlib, execute:

python tools/inspect_toolbar.py
python tools/show_viewer_comparison.py --library matplotlib
python tools/show_viewer_comparison.py --library matplotlib --reference-backend QtAgg --subplots

Os comandos de comparação abrem uma janela visível, identificada e posicionada lado a lado, com os mesmos dados/figsize/DPI e eixos de graus com aspecto igual. Permite conferir canvas/margens, toolbar/hover, títulos/fontes, cursor, Home/Back/Forward, pan/zoom e resize. Matplotlib só é importado quando o modo --library matplotlib é selecionado; o viewer Azimlib não o utiliza. QtAgg exige uma biblioteca Qt apenas no ambiente de referência; PySide6 foi instalado nesse ambiente para permitir a comparação de desenvolvimento.

Escopo da verificação

Comparação programática com a referência e observação visual Windows são registradas em viewer-visible-acceptance. Linux/macOS têm testes Tk automatizados, sem avaliação visual nativa humana. Os snapshots e resultados de desempenho permanecem históricos; não descrevem automaticamente o runtime atual.