ROS 2 Iron环境下RQT插件加载失败:setWidget属性缺失
解决RQT插件加载时的
AttributeError: 'MyPlugin' object has no attribute 'setWidget'问题 问题原因
ROS 2 Iron版本中,rqt_gui_py.plugin.Plugin基类已移除setWidget方法,你参考的教程可能基于旧版ROS 2(如Foxy)编写,导致API不兼容。
修复步骤
修改插件类的初始化逻辑
在你的my_module.py中,将原有的setWidget调用替换为直接设置self._widget属性,并通过插件上下文添加widget:from rqt_gui_py.plugin import Plugin from PyQt5.QtWidgets import QWidget class MyWidget(QWidget): # 自定义Widget的实现代码 def __init__(self, parent=None): super().__init__(parent) # 这里添加你的GUI元素,比如按钮、标签等 class MyPlugin(Plugin): def init_plugin(self, context): super().init_plugin(context) # 初始化自定义Widget self._widget = MyWidget() # 将Widget添加到RQT上下文 context.add_widget(self._widget)验证配置文件正确性
- 检查
plugin.xml中类的路径是否匹配你的代码结构,确保type属性指向正确的Python类:<library path="lib/python3.10/site-packages/rqt_mypkg"> <class name="rqt_mypkg/MyPlugin" type="rqt_mypkg.my_module.MyPlugin" base_class_type="rqt_gui_py::Plugin"> <description>自定义RQT插件</description> <qtgui> <label>My Plugin</label> <category>Custom</category> </qtgui> </class> </library> - 确认
setup.py的entry_points配置正确注册了插件:setup( # 其他配置项 entry_points={ 'rqt_gui.plugins': [ 'rqt_mypkg = rqt_mypkg.my_module:MyPlugin', ], }, )
- 检查
重新编译与测试
重新执行编译命令:colcon build --packages-select rqt_mypkg source install/setup.bash然后再次加载插件:
rqt --force-discover --standalone rqt_mypkg
内容的提问来源于stack exchange,提问作者MiserlyMark
相关产品推荐
相关产品推荐

