当我开发QGIS插件时,我在Qt中推广类时遇到了一些问题。
我使用插件生成器创建插件,然后将结构重新组织如下:
所以现在,当我将Qt设计器中的ComboBox提升到src文件夹中的combobox时。在QGIS中,我得到了错误信息。
2022-07-19T08:22:24 CRITICAL Traceback (most recent call last):
File "C:\PROGRA~1/QGIS32~1.2/apps/qgis/./python\qgis\utils.py", line 423, in _startPlugin
plugins[packageName] = package.classFactory(iface)
File "C:\Users/blank/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\test\__init__.py", line 35, in classFactory
from .test import test
File "C:\PROGRA~1/QGIS32~1.2/apps/qgis/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users/blank/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\test\test.py", line 31, in
from .test_dockwidget import testDockWidget
File "C:\PROGRA~1/QGIS32~1.2/apps/qgis/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "C:\Users/blank/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\test\test_dockwidget.py", line 30, in
FORM_CLASS, _ = uic.loadUiType(os.path.join(
File "C:\PROGRA~1/QGIS32~1.2/apps/qgis/./python\qgis\PyQt\uic\__init__.py", line 36, in __loadUiType
return __PyQtLoadUiType(*args, **kwargs)
File "C:\PROGRA~1\QGIS32~1.2\apps\Python39\lib\site-packages\PyQt5\uic\__init__.py", line 204, in loadUiType
exec(code_string.getvalue(), ui_globals)
File "", line 29, in
File "C:\PROGRA~1/QGIS32~1.2/apps/qgis/./python\qgis\utils.py", line 888, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ModuleNotFoundError: No module named 'src'我在Qt Designer中提升的小部件如下所示:
也许有人知道怎么写代码来修复呢?有可能吗?我想提一下,当我在QGIS之外开发一些程序时,我还没有遇到这个问题。
这是QGIS插件的源代码。
test_dockwidget.py
import os
from qgis.PyQt import QtGui, QtWidgets, uic
from qgis.PyQt.QtCore import pyqtSignal
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), r'ui\test_dockwidget_base.ui'))
class testDockWidget(QtWidgets.QDockWidget, FORM_CLASS):
closingPlugin = pyqtSignal()
def __init__(self, parent=None):
"""Constructor."""
super(testDockWidget, self).__init__(parent)
# Set up the user interface from Designer.
# After setupUI you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://doc.qt.io/qt-5/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
def closeEvent(self, event):
self.closingPlugin.emit()
event.accept()combobox.py
from PyQt5.QtWidgets import QComboBox
class Combobox(QComboBox):
def __init__(self, parent):
super().__init__()
self.setParent(parent)
self.currentIndexChanged.connect(self.color)
def color(self):
print(self.sender(), self.currentIndex())当然还有test.py文件,但是它太长了,它是由插件生成器创建的,所以我不把它粘贴在这里。
发布于 2022-08-17 14:33:20
没有经过测试,但我要说,在src目录中创建一个空文件src将解决src无法将src识别为模块的问题。
https://stackoverflow.com/questions/73032452
复制相似问题