如何将使用 qt 和 python 创建的 gui 保存为图像

How to save a gui created with qt and python as an image

我正在尝试使用 qt creator 和 python 生成带有值的流程图。之后我想将生成的流程图另存为图像,但我不知道该怎么做。这是我的尝试:

import sys
from PyQt5 import QtWidgets, uic
from PyQt5.QtGui import *

from mainwindow import Ui_MainWindow


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)


app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
screen = app.primaryScreen()
screenshot = screen.grabWindow(window)
screen.save('screenshot.png', 'png')

调用 show 方法并不意味着它立即显示,而是该方法通知 OS 以便创建 window。一种可能的解决方案是使用 QTimer,另一方面,grabWindow 方法使用关联的 WID 抓取 window,在这种情况下最好使用 grab 方法:

from functools import partial


def take_screenshot(widget):
    pixmap = widget.grab()
    if not pixmap.isNull():
        pixmap.save("/fullpath/of/screenshot.png", "PNG")
    QApplication.quit()


def main():
    app = QtWidgets.QApplication(sys.argv)

    window = MainWindow()
    window.show()

    QTimer.singleShot(500, partial(take_screenshot, window))

    app.exec_()


if __name__ == "__main__":
    main()