Как загрузить изображение с QLabel в PySide2 - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в коде и питоне. Я читал, что tkinter немного "базовый", если вы хотите разработать приложение, которое немного сложнее, а PyQt проблематичен для лицензирования. Вот почему я выбрал PySide2 для разработки такого рода проекта , но до сих пор документация была относительно скудной. Это правильный выбор?

Моя нынешняя проблема с кодированием заключается в следующем: я пытаюсь загрузить изображение с помощью PySide2, но безуспешно. Вот код моих 2 попыток:

Попытка № 1:

import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img)
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)
label.show()
app.exec_()

Я получаю следующее сообщение:

Traceback (most recent call last):

File "<ipython-input-1-86961df4959d>", line 8, in <module>
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)

TypeError: descriptor 'setPixmap' requires a 'PySide2.QtWidgets.QLabel' object but received a 'PySide2.QtGui.QPixmap'

Используя информацию в Traceback, я попробовал следующее Попытка № 2:

import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img)
lab=PySide2.QtWidgets.QLabel(pixmap)
PySide2.QtWidgets.QLabel.setPixmap(lab)
app.exec_()

Я получаю следующее сообщение об ошибке:

Traceback (most recent call last):

File "<ipython-input-1-61b41e4b2f63>", line 8, in <module>
lab=PySide2.QtWidgets.QLabel(pixmap)

TypeError: 'PySide2.QtWidgets.QLabel' called with wrong argument types:
PySide2.QtWidgets.QLabel(PySide2.QtGui.QPixmap) Supported signatures:
PySide2.QtWidgets.QLabel(PySide2.QtWidgets.QWidget = None, 
PySide2.QtCore.Qt.WindowFlags = Qt.WindowFlags())
PySide2.QtWidgets.QLabel(unicode, PySide2.QtWidgets.QWidget = None, PySide2.QtCore.Qt.WindowFlags = Qt.WindowFlags())

1 Ответ

0 голосов
/ 07 мая 2018

Вот как должен выглядеть ваш код:

import sys
from PySide2 import QtCore, QtGui, QtWidgets

app = QtWidgets.QApplication(sys.argv)

pixmap = QtGui.QPixmap('/Users/mymac/Downloads/ecg_measure.png')
label = QtWidgets.QLabel()
label.setPixmap(pixmap)    
label.show()

app.exec_()

Однако QLabel, вероятно, не подходит для проекта, который вы хотите разработать. Скорее всего, вам понадобится Graphics View Framework . См. этот пример просмотра изображений для ознакомления с основной демонстрацией, которая обеспечивает панорамирование и масштабирование. Он написан с использованием PyQt5, но вы можете легко преобразовать его в PySide2 - просто замените PyQt5 на PySide2 в импорте в верхней части файла и замените pyqtSignal на Signal в строке 4. Пример также требуется файл изображения с именем «image.jpg» в текущем каталоге (или вы можете просто отредактировать путь по умолчанию в методе loadImage).

Если у вас нет большого опыта работы с PySide / PyQt, я бы порекомендовал вам пройти через это руководство . Он написан для PyQt5, но код будет идентичным на 99% для PySide2. Как указывалось выше, вам обычно нужно только изменить импорт и удалить несколько префиксов pyqt для API, таких как pyqtSignal и pyqtSlot. Полная документация PySide2 может быть найдена здесь , а полная документация Qt здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...