Я немного потерял, когда дело доходило до структурирования моих проектов. Я стараюсь структурировать вещи способами, которые имеют смысл, но всегда заканчивают реструктуризацию всего, по крайней мере, дважды в день. Конечно, мои проекты не очень большие, но я бы не хотел, чтобы все реструктурировать и просто что-то решить на этот раз.
Я опишу свою текущую программу, чтобы попытаться понять вещи. Это графическая программа с базой данных базы данных для расчета цены на паруса. Не все еще написано, но пользователь сможет выбрать категорию и модель паруса из двух выпадающих меню. В зависимости от комбинации модель-модель, в программе будут представлены флажки и спинбокс. Эти флажки и спинбокс, когда они изменяются, извлекают информацию из базы данных и представляют цену того, что этот флажок установлен или имеет определенное число (например, площадь в квадратных метрах) в спинбоксе.
В текущей форме проект выглядит следующим образом:
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
содержит все .ui
файлы, сделанные в Qt Designer. Это файлы XML, которые описывают GUI. Они могут быть преобразованы в сценарии 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
import sailqt.__version__
. Но, учитывая, что в первый раз мне пришлось перетасовать вещи и переделать строки в большинстве файлов, чтобы объяснить эту крошечную перетасовку, я решил просто спросить здесь.
Мои вопросы достаточно ясны:
- Как, в общем, проекты Python структурированы? Эта ссылка pydoc была полезной, но для меня это больше похоже на модуль, чем на то, что фактически выполняется пользователем.
- Правильно ли я получил вышеуказанное структурирование?
- Бонусные баллы за ответ, так как это немного не по теме. Почему я могу сделать
import os
, а затем делать такие вещи, какos.system("sudo rm -rf /")
, но я не могу делать такие вещи, какimport sailqt
, а затем делатьsailqt.gui.generate_gui.generate()
?