【发布时间】:2025-12-06 00:05:01
【问题描述】:
在构建我的项目时,我有点迷茫。我尝试以有意义的方式组织事物,但总是每天至少重组整个事物两次。诚然,我的项目不是很大,但我希望不必重组所有内容而只解决一次。
我将描述我当前的程序以尝试理解事物。这是一个带有数据库后端的图形程序,用于计算帆的价格。尚未编写所有内容,但用户将能够从两个下拉菜单中选择风帆类别和型号。根据类别-模型组合,程序将显示复选框和旋转框。这些复选框和旋转框在更改时会从数据库中提取信息,并显示选中该复选框或在旋转框中具有特定数字(例如,以平方米为单位的面积)的价格。
在当前形式下,项目如下所示:
COPYING
README.md
SailQt.pyw (Should program be called from here ...)
sailqt/
__init__.py (This holds a __version__ string)
SailQt.pyw (... or here?)
gui/
__init__.py
MainWindow.py (This needs access to a __version__ string)
MainWindow_rc.py
OptionsWidget.py
ui_MainWindow.py
ui_OptionsWidget.py
resources/
__init__.py
database.db
generate_gui.py
MainWindow.ui
MainWindow.qrc
OptionsWidget.ui
icons/
logo.png
进一步澄清。 resources 保存在 Qt Designer 中制作的所有 .ui 文件。它们是描述 GUI 的 XML 文件。可以使用终端工具将它们转换为 Python 脚本,我已将其嵌入到 generate_gui.py 中。 .qrc 文件也是如此。 generate_gui.py 将自动生成的文件放在 gui 文件夹中,前缀为 ui_ 或后缀为 _rc。 database.db 目前为空,但最终将用于保存价格和所有内容。
MainWindow.py 和 OptionsWidget.py 是保存同名对象的 Python 文件,但减去了 .py 后缀。 MainWindow 在其显示表面中包含 OptionsWidget。两个对象都使用它们对应的ui 和rc 文件。
SailQt.pyw 是创建MainWindow 实例的文件,告诉它显示自己,然后告诉 (Py)Qt 进入它的循环并从那里接管。它基本上很像许多图形应用程序的.exe 文件,因为它是一个让程序运行的小文件。
我最初的猜测是将SailQt.pyw 放在sailqt 文件夹中。但随后MainWindow.py 突然需要访问__version__ 字符串。我能弄清楚如何实现这一点的唯一方法是将SailQt.pyw 移动到我项目的根文件夹,并让MainWindow.py 导入sailqt.__version__。但考虑到那是我第 n 次不得不在大多数文件中重新整理并重做行以解决这个微小的混乱,我决定在这里问一下。
我的问题很清楚:
- 一般来说,Python 项目的结构如何? This pydoc link 很有帮助,但对我来说这更像是一个模块,而不是用户实际执行的东西。
- 上述结构是否正确?
- 回答这个问题可以加分,因为它有点跑题了。为什么我可以先做
import os然后再做os.system("sudo rm -rf /")之类的东西,但我不能做import sailqt之类的东西然后再做sailqt.gui.generate_gui.generate()?
【问题讨论】: