gpt4 book ai didi

python - 在 QtDesigner GUI 中嵌入 matplotlib 图

转载 作者:行者123 更新时间:2023-11-28 17:10:13 24 4
gpt4 key购买 nike

我试图通过在使用 Qt Designer 创建的 Qt GUI 中嵌入一个 matplotlib 图来混淆我的方式。我已经能够通过 Python 创建我想要的图形。我创建了一个带有小部件的基本 GUI,以允许我选择/加载输入文件,并在 GUI 中嵌入的 matplotlib 图形中绘制这些文件中的数据。我通过向 GUI 添加一个名为 plotwidget 的空白小部件,然后使用此小部件作为输入调用 GraphInit 类来完成此操作。

我目前面临的问题是,虽然我的图在 GUI 中显示并根据需要更新,但它似乎没有注意在我的 Python 代码(创建 FigureCanvas 的地方)中为它定义的大小策略) 或用于 Qt Designer 中的 plotWidget 小部件。我一直在用this demo ,除其他外,作为该项目的起点。然而,所有这些示例都完全从 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 可用 here .任何建议表示赞赏!

最佳答案

我检查了您的 ui 文件,plotWidget 根本没有布局。尝试给它一个,我建议使用网格布局。

然后,在为 Canvas 设置父级之后

self.setParent(parent)

尝试将其添加到父布局:

parent.layout().addWidget(self)

关于python - 在 QtDesigner GUI 中嵌入 matplotlib 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48099359/

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