gpt4 book ai didi

python - 如何在 PyQt4 中使用 matplotlib

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:02 25 4
gpt4 key购买 nike

我想在 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 中设置 Canvas 小部件,我仍在努力寻找我的代码中的错误所在。非常感谢您的帮助,谢谢。

最佳答案

为了不能直接在Qt Designer中使用matplotlib,为此我们必须提升一个QWidget来使用FigureCanvas或更好的一个从它继承的类,如下所示,首先我们在名为 canvas.py 的文件中创建一个名为 Canvas 的类:

Canvas .py

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
import matplotlib.pyplot as plt

class Canvas(FigureCanvas):
def __init__(self, parent=None):
self.figure = plt.figure()
FigureCanvas.__init__(self, self.figure)
self.setParent(parent)

在通过 Qt Designer 创 build 计后,我们拥有了所有想要的元素,但是我们想要放置参数的地方使用 Containers 中的 Widget 元素, 我们将其命名为 canvas:

enter image description here

然后我们通过右键单击并选择选项promoted to ...来提升它:

enter image description here

得到下图所示,在Promoted Class Name中我们将Canvas作为类名,在Header File中> 我们放置canvas.h(在头文件中放置file.py文件,例如package.subpackage.file.h),然后按 Add 并在 Promote 之后:

enter image description here

最后我们得到一个类似下面的文件结构:

.
├── canvas.py
└── main.ui

然后我们创建文件 main.py,我们将您的代码与小的变化放在一起:

主.py

import matplotlib
matplotlib.use('Qt4Agg')

import sys
from PyQt4 import QtCore, QtGui, uic
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.csvbutton.clicked.connect(self.plot)

def plot(self):

filePath="data.csv"
df= pd.read_csv(str(filePath),index_col='date')
ax = self.canvas.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_())

最后我们得到如下结果:

enter image description here

您可以找到完整的项目 here


如果你想添加 NavigationToolbar 可以使用下面的代码:

...
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar

...

class MyApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.addToolBar(NavigationToolbar(self.canvas, self))
...

enter image description here

关于python - 如何在 PyQt4 中使用 matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45369725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com