Вам нужно mod zzz;
только один раз в main.rs
.
В aaa.rs
и bbb.rs
вам нужен use crate::zzz;
, а не mod zzz;
.
Пример:
Файл src/aaa.rs
:
use crate::zzz; // `crate::` is required since 2018 edition
pub fn do_something() {
zzz::do_stuff();
}
Файл src/bbb.rs
:
use crate::zzz;
pub fn do_something_else() {
zzz::do_stuff();
}
Файл src/main.rs
: [1127 ]
// src/main.rs
mod aaa;
mod bbb;
mod zzz;
fn main() {
aaa::do_something();
bbb::do_something_else();
}
Файл src/zzz.rs
:
pub fn do_stuff() {
println!("does stuff zzz");
}
Вам понадобится mod zzz;
внутри модуля aaa
, только если у вас есть каталог с именем aaa
и внутри это файлы mod.rs
и zzz.rs
. Затем вам нужно будет поместить mod zzz;
в mod.rs
, чтобы сделать подмодуль aaa::zzz
видимым для остальной части вашей программы.
У Болотной птицы проекта мы используем Python gtkmvc, который делает намного легче применить шаблоны MVC при использовании pygtk и поляну, Вы видите структуру файлов нашего проекта в репозитории SVN:
wader/
cli/
common/
contrib/
gtk/
controllers/
models/
views/
test/
utils/
Это, вероятно, не имеет никакого отношения к PyGTK, а скорее общей организационной проблеме кода. Вы, вероятно, извлекли бы выгоду из применения некоторого MVC (Образцовый Контроллер Представления) шаблоны разработки. См. Шаблоны разработки, например.
"содержит класс первичного приложения (большинство функциональных стандартных программ)"
Как в исключительном - один класс?
Я не удивлен, что Один Класс Делает Все разрабатывает, не работает. Это не могло бы быть тем, что я назову объектно-ориентированным. Это не кажется, что следует типичному шаблону разработки MVC, если Ваша функциональность накапливается в едином классе.
Что находится в этом крупном классе? Я предполагаю, что можно, вероятно, осуществить рефакторинг это в части. У Вас есть два размера кандидата для рефакторинга Вашего класса приложений - если, действительно, я угадал, что Вы поместили все в единый класс.
Прежде, чем сделать что-либо еще, осуществите рефакторинг в компоненты, которые параллельны Объектам Реального мира. Не ясно, что находится в Вашем "state.py" - является ли это надлежащей моделью реальных объектов или просто отображениями между персистентным устройством хранения данных и некоторой темной структурой данных в приложении. Скорее всего, Вы переместили бы обработку из своего приложения и в Вашу модель (возможно state.py, возможно новый модуль, который является надлежащей моделью.)
Разломайте свою модель на кусочки. Это поможет организовать управление и просмотреть элементы. Наиболее распространенная ошибка MVC состоит в том, чтобы поместить слишком много в управление и ничто в модели.
Позже, после того как Ваша модель делает большую часть работы, можно посмотреть на, осуществляют рефакторинг в компоненты, которые параллельны презентации GUI. Различные кадры верхнего уровня, например, должны, вероятно, иметь отдельные объекты cotrol. Не ясно, что находится в "GUI.py" - это могло бы быть надлежащим представлением. То, что, кажется, отсутствует, является Компонентом элемента управления.
Извините, что ответил настолько поздно. Новозеландец кажется мне намного лучшим решением, чем gtkmvc. Это - моя первая зависимость для любого pygtk проекта.
Python 2.6 поддерживает явный относительный импорт, который делает пакеты использования еще легче, чем предыдущие версии. Я предлагаю, чтобы Вы изучили повреждение Вашего приложения в меньшие модули в пакете. Можно организовать приложение как это:
myapp/
application/
gui/
command/
state/
Где каждый каталог имеет свое собственное __init__.py
. Можно взглянуть на любое приложение Python или даже стандартные модули библиотеки для примеров.
Так не получавший ответ относительно моего редактирования к исходному вопросу, я провел еще некоторое исследование и заключение, в которое я, кажется, приезжаю, то, что да, я должен выломать интерфейс в несколько представлений, каждого с его собственным контроллером. Python-gtkmvc обеспечивает способность к этому путем обеспечения a glade_top_widget_name
параметр конструктору Представления. Это все, кажется, имеет большой смысл, хотя он собирается потребовать большого рефакторинга моей существующей кодовой базы, которую я могу или не могу быть готов предпринять в краткосрочном (я знаю, я знаю, я должен.), Кроме того, меня оставляют задаться вопросом, должен ли просто иметь единственный Объект модели (мое приложение довольно просто - не больше, чем двадцать пять Вара состояния), или если я должен выломать его в многоуровневые модели и иметь для контакта с контроллерами, наблюдая многоуровневые модели и объединяя уведомления в цепочку через них. (Снова, я знаю, что действительно должен сделать последнего.), Если у кого-либо есть дальнейшее понимание, я все еще действительно не чувствую, что получил ответ на исходный вопрос, хотя у меня есть направление для заголовка в теперь.
(Кроме того, это походит на их, должны быть другие варианты архитектуры под рукой, учитывая, что вплоть до сих пор я не видел единственное приложение Python, кодированное в стиле MVC, но с другой стороны много приложений Python имеют тенденцию иметь точную проблему, которую я описал выше.)