По сути, вы хотите поделиться данными между основным сценарием и некоторыми другими, что это import
s.Хороший способ сделать это - сохранить эти данные в модуле и импортировать их во все сценарии, которым требуется доступ к этим значениям.
Сначала создайте пустой файл сценария, например shared.py
. * 1005.*
Затем добавьте import shared
в начало основного сценария (т. Е. Birchforest.py
).
После этого измените обратный вызов кнопки «Сохранить» printtext()
, чтобы он сохранял значение вИменованный атрибут этого модуля:
import shared
.
.
.
# --- Textbox ---
def printtext():
global e
shared.v = e.get() # Store current Entry value in shared module.
Наконец, вы должны добавить import shared
начало сценариев, которые будут import
отредактированы основным сценарием (т.е. CPS.py
, BPS.py
и т. Д.), Чтобы они могли получить доступ к этим общим данным.
Например:
import shared
print('in CPS')
print(' shared.v:', shared.v)
... # rest of script
После этого они смогут получить доступ к любым значениям, которые основной скрипт поместил в пространство имен модуля shared
.
Thisработает, потому что import
ed модули кэшируются в sys.modules
, и если другой скрипт import
sa модуль, который уже был import
ed каким-либо другим скриптом, кэшированное значение используется вместо повторной загрузки и выполнения именованного скрипта снова,
Это фактически означает, что модули реализованы таким образом, что они следуют шаблону проектирования Singleton - потому что это экземпляры класса types.ModuleType
.
Если выЕсли вы можете определить значения по умолчанию для значений атрибутов, в этом случае shared.py
больше не будет пустым.Имейте в виду, однако, что изменения, внесенные в эти значения во время выполнения с помощью операторов присваивания в любом другом модуле, будут , а не постоянными, поскольку изменения вносятся только в версию модуля в памяти (кэшируется всписок sys.modules
), а не к самому файлу сценария .py
.
Аналогичная идея описана в Как разделять глобальные переменные между модулями? раздел онлайндокументация.