Python 在QImage上绘制矩形,但不显示它

Python 在QImage上绘制矩形,但不显示它,python,python-3.x,pyqt,pyqt5,qimage,Python,Python 3.x,Pyqt,Pyqt5,Qimage,我想在QImage上绘制矩形,并将结果保存为png。下面的最小示例应该可以做到这一点 从PyQt5.QtGui导入QImage、QColor、QPainter、QBrush 从PyQt5.QtWidgets导入QApplication、QMainWindow、QWidget 导入系统 类窗口(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() self.title=“PyQt5绘图教程” self.top=150 self.left=150 自宽

我想在QImage上绘制矩形,并将结果保存为png。下面的最小示例应该可以做到这一点

从PyQt5.QtGui导入QImage、QColor、QPainter、QBrush
从PyQt5.QtWidgets导入QApplication、QMainWindow、QWidget
导入系统
类窗口(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.title=“PyQt5绘图教程”
self.top=150
self.left=150
自宽=500
自身高度=500
self.mypainter=mypainter()
self.mypainter.create()
self.InitWindow()
def初始化窗口(自):
self.setWindowTitle(self.title)
self.setGeometry(self.top、self.left、self.width、self.height)
self.show()
类MyPainter(QWidget):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.img=QImage(25,25,QImage.Format_RGBA64)
self.color1=QColor(255,0,0,255)
self.color2=QColor(0,255,0,255)
self.color3=QColor(0,0,255,255)
self.box=(
(2, 2, 10, 10),
(5, 5, 4, 5),
(10, 10, 10, 7))
def创建(自我):
self.colors=(
self.color1,
self.color2,
自我评价(3)
对于idx,枚举中的框(self.box):
self.color=self.colors[idx]
self.bndboxSize=box
self.repaint()
self.img.save(“myImg.png”)
def paintEvent(自身,事件):
油漆工=油漆工(自身)
painter.drawImage(self.rect(),self.img)
画师.镶嵌(QBrush(自身颜色))
painter.drawRect(self.bndboxSize)
App=QApplication(sys.argv)
window=window()
sys.exit(App.exec())
我所期望的

黑色背景也可以是透明的

我得到了什么

这只是一个带有alphachannel的图像,如果您悬停,您将获得链接

我得到了什么(调试模式)


我不知道如何获得想要的图像。

如果要创建图像,则无需使用小部件,但必须使用QPaint在图像上绘制。在OP的尝试中,它被绘制在QWidget上,而QImage只有噪音

from PyQt5.QtCore import QRect, Qt
from PyQt5.QtGui import QColor, QGuiApplication, QImage, QPainter


def create_image():
    img = QImage(25, 25, QImage.Format_RGBA64)
    img.fill(Qt.black)

    painter = QPainter(img)

    colors = (QColor(255, 0, 0, 255), QColor(0, 255, 0, 255), QColor(0, 0, 255, 255))
    boxes = (QRect(2, 2, 10, 10), QRect(5, 5, 4, 5), QRect(10, 10, 10, 7))

    for color, box in zip(colors, boxes):
        painter.fillRect(box, color)

    painter.end()

    return img


def main():
    app = QGuiApplication([])
    qimage = create_image()
    qimage.save("myImg.png")


if __name__ == "__main__":
    main()
输出:


我将在明天测试这个,但它看起来很有希望。知道是什么造成了噪音吗?@Makanumages创建QImage时,内存是保留的,但出于效率原因,内存没有被清理,因此它以前的数据通常被认为是随机的。我对它进行了测试,并使用了我的原始代码。那绝对是我要找的。