【发布时间】:2018-01-04 07:13:25
【问题描述】:
我想在 PyQt 中绘制一个嵌入 matplotlib 的图形。 我将 Qt Designer 用于主窗口,并为信号和插槽连接部分编写 python 代码。
所以我的代码看起来像这样:
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 Designer 文件和 python 代码之间的连接,我无法直接在 Qt Designer 中设置画布小部件,而且我仍在努力寻找错误在我的代码中的位置。 非常感谢您的帮助,谢谢。
【问题讨论】:
-
如果您没有在设计器中设置画布,那么在当前状态下,您的
self.canvas不会包含在窗口的任何布局中。试试这个:在设计器中,在您想要放置画布的地方(QWidget、Groupbox 等)制作一个类似对象的容器。在代码中构建您的画布,将其添加到本地布局(例如QHBoxLayout)并在您的容器中创建一个.setLayout(canvaslayout)。这应该将您的画布正确放置在 UI 中。 -
你得到什么错误?
标签: python matplotlib pyqt pyqt4 qt-designer