将含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
相关产品推荐
相关产品推荐

