Como permitir que escalar com relação de aspecto uniforme (Py) Qt?
-
06-07-2019 - |
Pergunta
Se você tiver um QImage embrulhado dentro de um QLabel, é possível escalá-lo para cima ou para baixo quando você redimensionar a janela e manter a relação de aspecto (para que a imagem não fique distorcida)? Eu descobri que ele pode escalar usando setScaledContents (), e você pode definir um tamanho mínimo e máximo, mas a imagem ainda perde seu aspecto.
Seria ótimo se isso poderia ser explicado usando Python (desde que eu não sei c ++), mas eu vou levar o que eu posso começar. : -)
Agradecemos antecipadamente!
Solução
Eu estou mostrando isso como C ++, que é o que a documentação que eu estou olhando é. Não deve ser muito difícil para converter em python.
Você precisa criar um derivado costume de QLayoutItem
, que substitui bool hasHeightForWidth()
e int heightForWidth( int width)
para preservar a relação de aspecto de alguma forma. Você poderia passar a imagem e consultá-lo, ou você pode apenas definir a relação diretamente. Você também vai precisar para se certificar a função widget()
retorna um ponteiro para a etiqueta apropriada.
Uma vez feito isso, você pode adicionar um item de layout para um layout da mesma maneira que você faria com um widget. Assim, quando o rótulo é adicionado, alterá-lo para usar seu personalizado classe de item de layout.
Eu não testei nada disso, por isso é uma solução teórica neste momento. Eu não sei de qualquer maneira de fazer isso solução através de designer, se isso era desejado.
Outras dicas
Converter a imagem para um QPixmap
(QPixmap.fromImage(img)
uso) e, em seguida, você pode usar scaledToHeight()
.