【发布时间】:2020-05-05 09:41:18
【问题描述】:
我正在创建一个应用程序,它可以自动计算成绩并分配成绩字母,在应用程序中,绘图是使用 Matplotlib 创建的。我想将QTableView 和数字包含在QTextDocument 中进行打印。我知道如何插入QTableView,但我不知道如何在表格后面插入数字。
这是直接可以还是应该先把图片存盘?
【问题讨论】:
标签: python matplotlib pyqt pyqt5
我正在创建一个应用程序,它可以自动计算成绩并分配成绩字母,在应用程序中,绘图是使用 Matplotlib 创建的。我想将QTableView 和数字包含在QTextDocument 中进行打印。我知道如何插入QTableView,但我不知道如何在表格后面插入数字。
这是直接可以还是应该先把图片存盘?
【问题讨论】:
标签: python matplotlib pyqt pyqt5
您必须将画布转换为 QImage,然后将其作为资源添加到 QTextDocument。
import sys
import time
import uuid
import numpy as np
from matplotlib.backends.qt_compat import QtCore, QtGui, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self._main = QtWidgets.QWidget()
self.setCentralWidget(self._main)
layout = QtWidgets.QVBoxLayout(self._main)
static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
layout.addWidget(static_canvas)
static_canvas.setFixedHeight(200)
self._static_ax = static_canvas.figure.subplots()
t = np.linspace(0, 10, 501)
self._static_ax.plot(t, np.tan(t), "r.")
self.textedit = QtWidgets.QTextEdit()
button = QtWidgets.QPushButton("Add Canvas")
button.clicked.connect(self.add_image)
layout.addWidget(button, stretch=0)
layout.addWidget(self.textedit, stretch=1)
def add_image(self):
document = self.textedit.document()
img = self.canvasToQImage(self._static_ax.figure.canvas)
url = QtCore.QUrl()
url.setScheme("mydata")
url.setHost("image-{uuid}.png".format(uuid=uuid.uuid4()))
document.addResource(QtGui.QTextDocument.ImageResource, url, img)
# add image
cursor = QtGui.QTextCursor(document)
imageFormat = QtGui.QTextImageFormat()
imageFormat.setName(url.toString())
cursor.insertImage(imageFormat)
# or
# self.textedit.append('<img src="{url}" />'.format(url=url.toString()))
@staticmethod
def canvasToQImage(canvas):
data = canvas.buffer_rgba()
ch = 4
w, h = canvas.get_width_height()
bytesPerLine = ch * w
img = QtGui.QImage(data, w, h, bytesPerLine, QtGui.QImage.Format_ARGB32)
return img.rgbSwapped()
if __name__ == "__main__":
qapp = QtWidgets.QApplication(sys.argv)
app = ApplicationWindow()
app.resize(640, 480)
app.show()
qapp.exec_()
【讨论】:
AttributeError: type object 'QUuid' has no attribute 'Id128'