我想在PyQt中使用嵌入式matplotlib绘制一个图形。 我使用Qt Designer作为主窗口,并为信号和插槽连接部分编写python代码。如何在PyQt4中使用matplotlib
所以我的代码如下所示:
import sys
from PyQt4 import QtCore, QtGui, uic
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
qtCreatorFile = "main.ui" # my Qt Designer file
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.csvbutton.clicked.connect(self.plot)
def plot(self):
filePath="/path to csv file here"
df= pd.read_csv(str(filePath),index_col='date')
df.index = pd.to_datetime(df.index, unit='s')
ax = self.figure.add_subplot(111)
ax.hold(False)
ax.plot(df, '*-')
self.canvas.draw()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
我的主要问题是Qt设计文件和Python代码之间的联接,我不能在Qt Designer中直接设置画布组件和我仍然努力寻找错误在我的代码中的位置。 您的帮助非常感谢,谢谢。
如果您没有设置画布的设计师比,在当前状态下,您的'self.canvas'不包含在窗口的任何布局中。试试这个:在设计器中,在想要放置画布的位置(QWidget,Groupbox等)创建一个容器类似于对象的容器。在代码中构建画布,将其添加到本地布局(例如'QHBoxLayout'),并在容器中创建一个'.setLayout(canvaslayout)'。这应该将您的画布正确放置在用户界面中。 – armatita
你会得到什么错误? – Trilarion