2016-02-09 3 views
2

enter image description hereQImage: URL вместо пути к файлу?

Этот код присваивает растровой pixmap метке. Вместо того чтобы генерировать один я мог бы просто прочитать локальный файл:

img = QtGui.QImage('/Users/user/Desktop/photo.jpg') 

Интересно, есть ли способ, чтобы указать ссылку URL вместо пути к файлу? Тогда QLabel получит свою pixmap прямо из сети?

from PyQt4 import QtCore, QtGui 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    if not QtGui.QApplication.instance(): 
     app=QtGui.QApplication([]) 

    window = QtGui.QWidget() 
    window.setLayout(QtGui.QVBoxLayout()) 

    img = QtGui.QImage(32, 32, QtGui.QImage.Format_RGB32) 
    img.fill(QtCore.Qt.red) 

    pixmap = QtGui.QPixmap(img) 
    lbl = QtGui.QLabel() 
    lbl.setPixmap(pixmap) 

    icon = QtGui.QIcon(pixmap) 
    window.layout().addWidget(lbl) 

    window.show() 
    sys.exit(app.exec_()) 
+0

Надеюсь, вы не захотите сразу установить URL-адрес своего виджета (qlabel), который не может быть выполнен. Поэтому альтернатива - загрузить URL-адрес формы изображения и установить его в виде виджета (QLabel). В этом случае вам нужно используйте QNetworkManager для загрузки изображения из Интернета, а затем установите изображение в виджет. Пожалуйста, прочитайте документы для использования QNetworkManager (для загрузки контента с использованием URL-адреса) –

ответ

3

Насколько мне известно, не существует прямой способ получения QImage или QPixmap загружать данные прямо из URL. Но вы можете обойти это, предварительно извлекая данные из URL-адреса, а затем загрузив их в QPixMap.

Получить данные из URL:

import urllib2 
url_data = urllib2.urlopen(path).read() 

Теперь загрузите его в QPixmap:

pixmap = QPixmap() 
pixmap.loadFromData(url_data) 
lbl.setPixmap(pixmap) 

Стоит сказать, что вы должны попробовать и исключения ловить как urllib2.URLError или InvalidURL , обрабатывать случаи, когда URL-адрес защищен (https) и т. д.

+0

на python3.x 'import urllib.request' и используйте 'urllib.request.urlopen() .read() ' –

+0

Обратите внимание, что это блокирует GUI во время загрузки, что может быть проблемой в зависимости от вашего соединения. Было бы лучше использовать [QNetworkAccessManager] (http://doc.qt.io/qt-5/qnetworkaccessmanager.html) и выполнить асинхронную загрузку. –

Смежные вопросы