gpt4 book ai didi

python - 在 python 代码中与使用 Qt Designer 创建的 MatplotlibWidget 交互

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

我在与通过 Qt Designer 创建的 MatplotlibWidget 交互时遇到问题。我无法更改轴标签、比例、提供标题或任何内容。我做错了什么吗?

这是使用 Qt Designer 生成的示例 UI 代码:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.mplwidget = MatplotlibWidget(self.centralwidget)

self.mplwidget.setGeometry(QtCore.QRect(70, 50, 400, 300))
self.mplwidget.setObjectName("mplwidget")

MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))

from matplotlibwidget import MatplotlibWidget

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):

def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
QtGui.QMainWindow.__init__(self, parent, f)

self.setupUi(self)

这是我编写的用于与 UI python 代码交互的 python 代码:

from PyQt4 import QtGui, QtCore
from TestUI2 import MainWindow

class Window(MainWindow):
def __init__(self):
MainWindow.__init__(self)

x=[0,10,100]
y=[3,4,5]

self.mplwidget.axes.set_xscale('log') # Nothing Happens
self.mplwidget.axes.set_title('GRAPH') # Nothing Happens

self.mplwidget.axes.plot(x,y)


if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

最佳答案

您需要先为 MatplotlibWidget 定义您自己的类(在您的主脚本中,而不是 UI 代码中),然后在 Window() 定义中实例化它。为此,您还需要从 _qt4agg matplotlib 后端模块和 Figure 类导入 FigureCanvas:

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as Canvas
from matplotlib.figure import Figure

然后在 Matplotlib 类定义中创建 Figure 子图和 Figure Canvas 的实例,然后可以使用它们与主窗口中的图进行交互。所以使用你的代码看起来像这样:

from PyQt4 import QtGui, QtCore
from TestUI2 import MainWindow

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as Canvas
from matplotlib.figure import Figure

class Window(MainWindow):
def __init__(self):
MainWindow.__init__(self)

x=[0,10,100]
y=[3,4,5]

self.mplwidget = MatplotlibWidget(self.centralwidget)

self.mplwidget.setGeometry(QtCore.QRect(70, 50, 600, 500))
self.mplwidget.setObjectName("mplwidget")

self.mplwidget.plotDataPoints(x,y)

class MatplotlibWidget(Canvas):
def __init__(self, parent=None, title='Title', xlabel='x label', ylabel='y label', dpi=100, hold=False):
super(MatplotlibWidget, self).__init__(Figure())

self.setParent(parent)
self.figure = Figure(dpi=dpi)
self.canvas = Canvas(self.figure)
self.theplot = self.figure.add_subplot(111)

self.theplot.set_title(title)
self.theplot.set_xlabel(xlabel)
self.theplot.set_ylabel(ylabel)

def plotDataPoints(self, x, y):
self.theplot.plot(x,y)
self.draw()

if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

和 Ui 脚本:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)

self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")

MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):

def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
QtGui.QMainWindow.__init__(self, parent, f)

self.setupUi(self)

然后,如果您想与 mpl 图交互,例如更改标题,您可以在 Window 类中进行操作,例如:

self.mplwidget.theplot.set_title("New Title")

希望对您有所帮助。

关于python - 在 python 代码中与使用 Qt Designer 创建的 MatplotlibWidget 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216829/

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