You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将含pyqtgraph PlotWidget的QWidget加载到MainWindow时图表不显示求助

解决建议

1. 核心问题分析

你的代码存在两个关键问题导致PlotWidget不显示:

  • 加载的UI控件未被整合到TestWidget的布局体系中
  • QUiLoader默认无法识别Qt Designer中提升的pyqtgraph.PlotWidget自定义控件

2. 分步修复方案

(1)给TestWidget添加布局,整合加载的UI

当前TestWidget只是加载了UI文件,但没有将UI内容作为自身的子控件布局显示,需补充布局代码:

class TestWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        loader = QUiLoader()
        self.ui = loader.load('TestWidget.ui', self)
        
        # 添加布局,将加载的UI控件嵌入TestWidget
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.ui)
        layout.setContentsMargins(0, 0, 0, 0)  # 消除多余边距

(2)给QUiLoader注册自定义控件

QUiLoader无法自动识别提升的PlotWidget,必须手动注册才能正确加载:

# 在加载UI前添加注册代码
loader = QUiLoader()
loader.registerCustomWidget(pg.PlotWidget)

(3)验证Qt Designer提升设置

确保在Qt Designer中提升控件时:

  • 类名称填写PlotWidget
  • 头文件(Header file)填写pyqtgraph(Python模块名,而非C++头文件)
  • 确认当前控件已应用提升设置

3. 完整修正代码

import sys
from PyQt5 import QtWidgets
from PyQt5.QtUiTools import QUiLoader
import pyqtgraph as pg

class MainWindow(QtWidgets.QMainWindow):
     def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setCentralWidget(TestWidget())

class TestWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        loader = QUiLoader()
        # 注册PlotWidget,让加载器识别自定义提升控件
        loader.registerCustomWidget(pg.PlotWidget)
        self.ui = loader.load('TestWidget.ui', self)
        
        # 设置布局整合UI
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.ui)
        layout.setContentsMargins(0, 0, 0, 0)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者user3662357

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:50:30