我想组织我的PyQT项目,我试图将UI放在子文件夹中并像这样导入它们:
import sys
sys.path.append('UI/gui_sensors')
from gui_sensors_extended import Ui_SensorsWindow_Extended
但它给了我错误,因为找不到 * Ui_SensorsWindow * ,在 * Ui_SensorsWindow_Extended *
中继承的ui-class那么,你有什么建议来组织我的项目?我怎样才能在代码中处理它?</ p>
答案 0 :(得分:11)
构建python项目时需要记住一件事:当前运行的脚本的目录会自动添加到sys.path
的开头。
因此,如果您将包的<{1}}脚本放在顶层容器目录中,这将保证无论脚本在何处执行,包导入都将始终有效从。为了说明,这是一个简单的项目结构:
main.py
project /
main.py
package /
__init__.py
app.py
ui /
__init__.py
mainwindow.py
脚本应该非常小,并且只包含以下内容:
main.py
在if __name__ == '__main__':
import sys
from package import app
sys.exit(app.run())
模块中,gui模块将按如下方式导入:
app
可以在包树中的任何位置使用相同的导入语法。所以如果你添加了另一个这样的子包:
from package.ui.mainwindow import Ui_MainWindow
然后project /
main.py
package /
...
dialogs /
__init__.py
search.py
模块将导入其gui模块:
search
如果以这种方式组织所有python项目,则永远不需要操作from package.ui.search import Ui_SearchDialog
以使本地导入正常工作。
答案 1 :(得分:0)
您可以使用以下方法填写完整路径:
import sys
import os.path as osp
path = osp.dirname(__file__)
sys.path.append(osp.join(path, 'UI/gui_sensors'))
from gui_sensors_extended import Ui_SensorsWindow_Extended
__file__
包含当前模块的路径