【问题标题】:setPixmap crashing when trying to show image in label尝试在标签中显示图像时 setPixmap 崩溃
【发布时间】:2020-04-21 22:59:49
【问题描述】:

我用 pyqt 设计器创建了一个最小的示例,当按下按钮时更改标签的文本,并且应该通过标签在窗口中显示屏幕截图。

不幸的是,该示例在尝试在标签中显示屏幕截图时崩溃了。

from PIL.ImageQt import ImageQt
from PyQt5 import QtCore, QtGui, QtWidgets
from pyscreenshot import grab

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(503, 382)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(70, 30, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(80, 100, 47, 14))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        self.pushButton.clicked.connect(lambda: self.take_screenshot())
        QtCore.QMetaObject.connectSlotsByName(Form)

    def take_screenshot(self):
        self.label.setText("1?")
        screenshot = grab()
        self.label.setText("2")
        qim = ImageQt(screenshot)
        pix = QtGui.QPixmap.fromImage(qim)
        self.label.setText("3")
        self.label.setPixmap(pix)



    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))
        self.label.setText(_translate("Form", "TextLabel"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt pyqt5 screenshot qpixmap


    【解决方案1】:

    "screenshot" 与 "qimg" 共享相同的内存,并且作为屏幕截图,它是一个局部变量,当消除关联的内存时也会消除,因此 QLabel 的 QPbelmap 在尝试访问信息时将生成一个 Segmentation故障。解决方法是制作一个副本,让它们不共享相同的内存

    def take_screenshot(self):
        screenshot = grab()
        qim = ImageQt(screenshot).copy()
        pix = QtGui.QPixmap.fromImage(qim)
        self.label.setPixmap(pix)
        self.label.adjustSize()

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      相关资源
      最近更新 更多