如何将使用 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()
我正在尝试使用 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()