PyQt4: графический вид и размер пиксельной карты

Я разрабатываю графический интерфейс с помощью QTDesigner для некоторых задач обработки изображений. У меня есть два графических представления друг под другом в виде сетки. Оба должны отображать изображение, и позже я добавлю наложения.

Я создаю свой Pixmap img_pixmap и добавляю его в свою сцену. Затем эта сцена добавляется в мое графическое представление. Поскольку мое изображение намного больше размера экрана, я применяю fitInView (). В коде:

self.img_pixmap_p =  self.img_scene.addPixmap(img_pixmap)
self.img_view.setScene(self.img_scene)
self.img_scene.setSceneRect(QtCore.QRectF())
self.img_view.fitInView(self.img_scene.sceneRect(), QtCore.Qt.KeepAspectRatio)

Пока все хорошо, но как мне избавиться от белого пространства вокруг изображения? В идеале я хочу, чтобы мое растровое изображение использовало всю ширину графического представления и чтобы сохранить соотношение сторон, графическое представление должно соответствующим образом регулировать свою высоту. Есть идеи о том, как добиться этого простым способом?

Вот изображение, чтобы лучше понять, что я получаю:

Никто не любит белые границы

Как видите, есть белые границы, которых я хочу избежать.


person mgutsche    schedule 20.06.2015    source источник
comment
QGraphicsView не может отрегулировать его размер в соответствии с размером сцены по умолчанию. Вам необходимо вручную рассчитать оптимальную высоту и установить ее с помощью view.setFixedHeight(...).   -  person Pavel Strakhov    schedule 20.06.2015


Ответы (1)


Ладно, я сделал, как подсказал Павел:

img_aspect_ratio =  float(pixmap.size().width()) / pixmap.size().height() 
width = img_view.size().width()
img_view.setFixedHeight( width / img_aspect_ratio )
img_view.fitInView(img_scene.sceneRect(), QtCore.Qt.KeepAspectRatio)

Он отлично работает, когда вы вызываете это в каждом resizeEvent().

person mgutsche    schedule 25.06.2015