【问题标题】:Embedding matplotlib widget in a QtDesigner generated gui within python program在 python 程序中的 QtDesigner 生成的 gui 中嵌入 matplotlib 小部件
【发布时间】:2019-09-27 05:18:28
【问题描述】:

我正在编写一个应用来管理和显示温室数据。 逻辑在 python 中,gui 在 Qt5 中在 qt Designer 中创建。 这是一个学习项目,我都是新手。 我有:main_file.py、matplotlib.py(小部件)和一个 gui.py。 事情似乎奏效了,小部件在 gui 中加载,终端没有错误,但图表没有显示。我做错了什么?

# this is my gui.py file below
from Tab_Widget_Main_scailing_01 import Ui_MainWindow


class DesignerMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(self, parent = None):
        super(DesignerMainWindow, self).__init__(parent)
        self.setupUi(self)

    def mplwidget(self):
        timestamp = np.array([])
        temp_up = np.array([])
        time_format = '%d,%m,%Y,%X'

        self.ax.plot(timestamp, temp_up)
        self.ax.draw()

if __name__ == '__main__':
    app = QtWidgets.QApplication([sys.argv])
    gui = DesignerMainWindow()
    gui.show()
    sys.exit(app.exec_())

这是一个 matplotlib.py 小部件:

from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

class MplCanvas(FigureCanvas):
    def __init__(self):
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        FigureCanvas.__init__(self, self.fig)
        FigureCanvas.setSizePolicy(self,
                                    QtWidgets.QSizePolicy.Expanding,
                                    QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

class MplWidget(QtWidgets.QWidget):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.vbl = QtWidgets.QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.setLayout(self.vbl)

这里 gui.py 中的行,设计器生成的文件,与 matplotlib 小部件有关:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        (...)
        self.mpl_tab = QtWidgets.QWidget()
        self.mpl_tab.setObjectName("mpl_tab")
        self.horizontalLayout_49 = QtWidgets.QHBoxLayout(self.mpl_tab)
        self.horizontalLayout_49.setObjectName("horizontalLayout_49")
        self.horizontalLayout_48 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_48.setObjectName("horizontalLayout_48")
        self.tabWidget_4 = QtWidgets.QTabWidget(self.mpl_tab)
        self.tabWidget_4.setObjectName("tabWidget_4")
        self.mpl = MplWidget()
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
   sizePolicy.setHeightForWidth(self.mpl.sizePolicy().hasHeightForWidth())
        self.mpl.setSizePolicy(sizePolicy)
        self.mpl.setObjectName("mpl")
        self.tabWidget_4.addTab(self.mpl, "")

【问题讨论】:

    标签: python matplotlib pyqt pyqt5


    【解决方案1】:

    想通了。我唯一缺少的是主文件的 __init__() 函数中的“self.mplwidget()”。

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 2011-10-08
      • 2016-07-13
      • 1970-01-01
      • 2013-03-12
      • 2013-09-14
      • 2011-05-03
      • 2017-08-10
      • 2023-03-30
      相关资源
      最近更新 更多