QScene 上的图像未显示在 QGraphicsView 上。还尝试使用 QLabel 但失败了。
如果不使用小部件,可以显示图像,但使用它后,QGraphicScene 或 QLabel 结果是空的,但文本显示在那里。请告诉我,可能是什么问题?
使用 QScene、QGraphicsView、QWidget 的非工作变体:
from PyQt5.QtGui import *
from PyQt5.QtCore import QUrl
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout, QGraphicsScene, QGraphicsView
import sys
class Widget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(50,50,500,500)
url = "http://pp.vk.me/c627626/v627626428/be07/wbpWha0RqZ4.jpg"
self.scene = QGraphicsScene()
self.mainImage = QGraphicsView()
self.nam = QNetworkAccessManager()
self.nam.finished.connect(self.finishRequest)
self.nam.get(QNetworkRequest(QUrl(url)))
layout = QVBoxLayout()
layout.addWidget(self.mainImage)
self.setLayout(layout)
self.show()
def finishRequest(self, reply):
img = QImage()
img.loadFromData(reply.readAll())
self.item = QGraphicsPixmapItem(QPixmap.fromImage(img))
self.scene.addItem(self.item)
self.scene.setSceneRect(img.rect())
self.mainImage.setScene(self.scene)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Widget()
ex.show()
sys.exit(app.exec_())
使用 QLabel、QWidget 的非工作变体:
from PyQt5.QtGui import *
from PyQt5.QtCore import QUrl
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
import sys
class Widget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
url = "http://pp.vk.me/c627626/v627626428/be07/wbpWha0RqZ4.jpg"
self.lbl = QLabel("loading...")
self.lbl.setAutoFillBackground(True)
nam = QNetworkAccessManager()
nam.finished.connect(self.finishRequest)
nam.get(QNetworkRequest(QUrl(url)))
self.layout = QVBoxLayout()
self.layout.addWidget(self.lbl)
self.setLayout(self.layout)
self.show()
def finishRequest(reply):
img = QImage()
img.loadFromData(reply.readAll())
self.lbl.setPixmap(QPixmap.fromImage(img))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Widget()
sys.exit(app.exec_())
使用 QLabel 但不使用 QWidget 的工作变体:
from PyQt5.QtGui import *
from PyQt5.QtCore import QUrl
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt5.QtWidgets import QApplication, QLabel
app = QApplication([])
url = "http://pp.vk.me/c627626/v627626428/be07/wbpWha0RqZ4.jpg"
lbl = QLabel("loading...")
nam = QNetworkAccessManager()
def finishRequest(reply):
img = QImage()
img.loadFromData(reply.readAll())
lbl.setPixmap(QPixmap(img))
nam.finished.connect(finishRequest)
nam.get(QNetworkRequest(QUrl(url)))
lbl.show()
app.exec_()
我在函数中看到了问题
finish_request
,您在其中传递了一个参数 -reply
,但是 python 中的对象方法总是采用第一个参数self
- 指向类对象的指针,它的模拟将this
在с++
当我将您的代码插入 IDE (PyCharm) 时,她立即在该函数中突出显示她不知道其中的变量来自何处
self
,事实上,这是正确的。带场景: