RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 606165
Accepted
Ramil
Ramil
Asked:2020-12-21 20:25:49 +0000 UTC2020-12-21 20:25:49 +0000 UTC 2020-12-21 20:25:49 +0000 UTC

图像未显示在小部件上

  • 772

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_()
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    gil9red
    2020-12-21T22:52:49Z2020-12-21T22:52:49Z

    我在函数中看到了问题finish_request,您在其中传递了一个参数 - reply,但是 python 中的对象方法总是采用第一个参数self- 指向类对象的指针,它的模拟将this在с++

    当我将您的代码插入 IDE (PyCharm) 时,她立即在该函数中突出显示她不知道其中的变量来自何处self,事实上,这是正确的。

    from PyQt5.QtGui import QPixmap
    from PyQt5.QtCore import QUrl
    from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
    from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
    
    
    class Widget(QWidget):
        def __init__(self):
            super().__init__()
    
            self.lbl = QLabel("loading...")
            self.lbl.setAutoFillBackground(True)
    
            self.nam = QNetworkAccessManager()
            self.nam.finished.connect(self.finish_request)
    
            url = "http://pp.vk.me/c627626/v627626428/be07/wbpWha0RqZ4.jpg"
            self.nam.get(QNetworkRequest(QUrl(url)))
    
            layout = QVBoxLayout()
            layout.addWidget(self.lbl)
    
            self.setLayout(layout)
    
        def finish_request(self, reply):
            img = QPixmap()
            img.loadFromData(reply.readAll())
    
            self.lbl.setPixmap(img)
    
    
    if __name__ == '__main__':
        app = QApplication([])
    
        w = Widget()
        w.show()
    
        app.exec()
    

    带场景:

    from PyQt5.QtGui import QPixmap
    from PyQt5.QtCore import QUrl
    from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
    from PyQt5.QtWidgets import (
        QApplication, QWidget, QVBoxLayout, QGraphicsScene, 
        QGraphicsView, QGraphicsPixmapItem, QGraphicsTextItem
    )
    
    
    class Widget(QWidget):
        def __init__(self):
            super().__init__()
    
            self.scene = QGraphicsScene()
            self.scene.addItem(QGraphicsTextItem('loading...'))
    
            self.view = QGraphicsView()
            self.view.setScene(self.scene)
    
            self.nam = QNetworkAccessManager()
            self.nam.finished.connect(self.finish_request)
    
            url = "http://pp.vk.me/c627626/v627626428/be07/wbpWha0RqZ4.jpg"
            self.nam.get(QNetworkRequest(QUrl(url)))
    
            layout = QVBoxLayout()
            layout.addWidget(self.view)
    
            self.setLayout(layout)
    
        def finish_request(self, reply):
            self.scene.clear()
    
            img = QPixmap()
            img.loadFromData(reply.readAll())
    
            item = QGraphicsPixmapItem(img)
            self.scene.addItem(item)
    
    
    if __name__ == '__main__':
        app = QApplication([])
    
        w = Widget()
        w.show()
    
        app.exec()
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5