我想在widget(QWidget)中显示我在QtDesigner中设计的gui中的pyplot图像:
当我按下Çiz
按钮时,我希望显示我可以使用该代码在python中创建的图像:
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 2)
f = np.poly1d(z)
x_fit = np.linspace(min(x), max(x), 10000)
y_fit = [f(_x) for _x in x_fit]
plt.plot(x, y)
plt.plot(x_fit, y_fit)
plt.show()
修改
我根据answer进行了一些更改,但我遇到了新问题。
我推广之后:
我重新安排了下面的代码:
# calculate polynomial and r
self.x_fit = np.linspace(min(self.itemX), max(self.itemY), 10000)
self.y_fit = [f(_x) for _x in self.x_fit]
self._dlg.plotwidget.plot(self.itemX, self.itemY)
self._dlg.plotwidget.plot(self.x_fit, self.y_fit)
self.itemX
是列表中的x值。
self.itemY
是列表中的y值。
self._dlg
是您看到的MainWindow。
当我尝试打开该窗口时,收到以下错误消息:
答案 0 :(得分:0)
抱歉,我没有完全回答这个问题,但我没有将matplotlib.pyplot
与pyqt一起使用。我建议使用pyqtgraph(http://pyqtgraph.org),它非常方便和强大。使用Qt Designer:
答案 1 :(得分:0)
我刚测试下面的代码对我有用:
import sys
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui, uic
uifilename = 'test.ui'
form_class = uic.loadUiType(uifilename)[0] #dirty reading of the ui file. better to convert it to a '.py'
class MyWindowClass(QtGui.QMainWindow, form_class):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.onInit()
def onInit(self):
#usually a lot of connections here
self.x_fit = np.linspace(1,10000, 10000)
self.y_fit = [f(_x) for _x in self.x_fit]
self.plotwidget.plot(self.x_fit,self.y_fit,symbol='o',pen=None)
self.plotwidget.setLabel('left',text='toto',units='')
self.plotwidget.setLabel('top',text='tata',units='')
def f(x):
return x**2+1
if __name__ == '__main__':
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
app = QtGui.QApplication([])
pg.setConfigOption('background', 'w')
win = MyWindowClass()
win.show()
app.exec_()
使用此test.ui:https://github.com/steph2016/profiles/blob/master/test.ui。 请注意,plotwidget封装在布局中。我认为它只适用于主窗口,但我不确定......