我正在努力通过在Qt Designer中创建的Qt GUI中嵌入matplotlib图形来完成任务。 我已经能够仅通过Python创建所需的图形。我创建了一个基本GUI,其中包含小部件,使我能够选择/加载输入文件,并将这些文件中的数据绘制在嵌入在GUI中的matplotlib图形中。我通过向GUI添加名为plotwidget
的空白小部件,然后使用此小部件调用GraphInit
类来实现这一点。
我目前面临的问题是,在GUI中显示的图形虽然按预期显示和更新,但似乎没有关注Python代码(创建FigureCanvas的地方)或Qt Designer中plotWidget
小部件定义的大小策略。我已经使用此演示文稿等作为项目起点。 但是,所有这些示例都是完全由Python生成GUI。我怀疑我在将matplotlib图形分配给小部件时做错了什么,但是我还没有能够找出具体问题。
代码(导入和绘图代码已删除,但核心部分包括添加图形的代码):
import sys
import os
import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMessageBox, QFileDialog, QPushButton, QLabel, QRadioButton, QDoubleSpinBox, QSpinBox, QWidget, QSizePolicy, QMainWindow
import PyQt5.uic
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import json
from datetime import datetime
import numpy as np
class LogViewer(QApplication):
def __init__(self):
QApplication.__init__(self, sys.argv)
self.ui = UI()
@staticmethod
def main():
vwr = LogViewer()
vwr.run()
def run(self):
self.ui.win.show() # Show the UI
self.ui.run() # Execute the UI run script
self.exec_()
class Graph_init(FigureCanvas):
def __init__(self, parent=None):
fig = Figure()
self.axes = fig.add_subplot(111)
self.compute_initial_figure()
self.axes.grid()
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
pass
class UI(object):
def __init__(self):
ui_path = os.path.dirname(os.path.realpath(__file__))
self.win = PyQt5.uic.loadUi(ui_path + '\\logview.ui')
self.filename = ui_path + '\\test.txt'
self.plotWin = Graph_init(self.win.plotWidget)
def run(self):
self.init_ui() # get initial values from the controllers
self.attach_ui_connections()
def init_ui(self):
w = self.win
w.txtLogFilename.setText(self.filename.split('/')[-1]) # just the file (no path)
def attach_ui_connections(self):
w = self.win
if __name__ == '__main__':
LogViewer.main()
GUI可以在这里下载。欢迎提出任何建议!
.ui
文件,以便找出需要做什么。 - Brad