python - 如何在我的 PyQt5 Qwidget 上显示 matplotlib
问题描述
我想绘制我的 PyQt 设计器文件。我制作了 2 个 py 文件,一个是 Main,另一个是 ui 文件(pyuic)这是 UI 的代码
self.graph_widget = QtWidgets.QWidget(self.tab_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.graph_widget.sizePolicy().hasHeightForWidth())
self.graph_widget.setSizePolicy(sizePolicy)
self.graph_widget.setObjectName("graph_widget")
graph_widget 是小部件名称
def show_graph(self):
self.graph_widget.fig = plt.Figure()
self.graph_widget.canvas = FigureCanvas(self.graph_widget.fig)
canvasLayout = QVBoxLayout()
canvasLayout.addStretch(1)
self.graph_widget.layout = QHBoxLayout()
self.graph_widget.layout.addLayout(canvasLayout)
ax = self.graph_widget.fig.add_subplot(1, 1, 1)
ax.grid()
self.graph_widget.canvas.draw()
这是在我的小部件上显示图表的 Main 代码。我想在我的小部件上显示图表,但它不起作用。就像发送信号之前一样显示白色窗口。并且不打印任何错误。
请让我知道我如何打印它。
解决方案
我认为您不太了解对象的概念。在你的函数show_graph()中,你写了self.graph_widget.fig,也就是说,fig是对象graph_widget的一个属性(一个变量),它是一个对象QWidget,所以通过写self.graph_widget.fig = plt.Figure( ) 没有意义。我建议你这个解决方案:
def show_graph(self):
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas #You can put it at the beginning of your program
self.fig = plt.Figure()
self.plot = self.fig.add_subplot()
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
#Create a layout
layout = QVBoxLayout()
layout.addWidget(self.canvas)
#You can now add your layout to your QWidget()
self.graph_widget.setLayout(layout)
#You can active the grid by the following line
self.plot.yaxis.grid()
对不起我的英语,我是法国人。
推荐阅读
- c++ - 获取 LLVM 类型/“取消引用”类型的大小
- firebase - 使用firebase托管时如何在vuejs的环境变量中保存firebase配置参数
- windows - 是否可以或有必要关闭之前启动时由另一个程序打开的文件?
- python - 区块链 nonce 值因负载而异
- .net - 在 ADFS 中重置密码不应允许最后 12 个密码。如何实施?
- java-native-interface - 在 JNI C++ 中将 jobject 转换为 Integer 并解析 intValue
- sql - 使用 group by 子句时显示重复的行?
- python - 用 shell=False 用 subprocess.call 替换 os.system
- android - 读取本机 android 清单合并失败 (networkSecurityConfig)
- spring - 用子 POM 中的非排除覆盖排除