Python 使用 pyqt、setPixmap 和 QLabel 崩溃

Ham*_*adi 0 python pyqt python-2.7

我在 windows 7 64 位机器上使用这个 python 代码,它只是显示随机生成的黑白图像。如果我使图像大于 511x511 像素,我的 python 2.7 控制台就会崩溃。不过它在我的 Mac 上运行良好。有任何想法吗?

import sys
from PyQt4 import QtGui, QtCore
import numpy as np


class PixmapTest(QtGui.QWidget):

    def __init__(self):
        super(PixmapTest, self).__init__()

        imglayout = QtGui.QHBoxLayout(self)

        size = 512
        img_8bit = (256*np.random.random((size,size))).astype(np.uint8)     

        img = QtGui.QImage(img_8bit.repeat(4), size, size, QtGui.QImage.Format_RGB32)

        pixmap = QtGui.QPixmap(img)

        imglabel = QtGui.QLabel(self)
        imglabel.setPixmap(pixmap)

        imglayout.addWidget(imglabel)
        self.setLayout(imglayout)

        self.show()        

def main():

    app = QtGui.QApplication(sys.argv)
    form = PixmapTest()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

101*_*101 5

奇怪的是,对我(Win7,64 位)来说,截止大小接近 300。我不知道为什么它会这样,但在我的情况下,我可以通过调用processEvents应用程序来修复它,如下所示:

class PixmapTest(QtGui.QWidget):
    def __init__(self, app):
        super(PixmapTest, self).__init__()
        self.app = app
        imglayout = QtGui.QHBoxLayout(self)
        size = 333
        img_8bit = (256*np.random.random((size,size))).astype(np.uint8)     
        img = QtGui.QImage(img_8bit.repeat(4), size, size, QtGui.QImage.Format_RGB32)
        pixmap = QtGui.QPixmap(img)
        imglabel = QtGui.QLabel(self)
        imglabel.setPixmap(pixmap)
        imglayout.addWidget(imglabel)
        self.setLayout(imglayout)
        self.show()        
        self.app.processEvents()

def main():
    app = QtGui.QApplication(sys.argv)
    form = PixmapTest(app)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)