Как исправить необходимость перезапуска программы при обновлении переменной из другого файла в python - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь создать игру, и когда вы повышаете уровень, вы разблокируете миссию, и она работает, но мне нужно перезапустить программу, чтобы она разблокировалась (переменная уровня находится в другом файле "save.py")

Я пытался использовать importlib для перезапуска save.py, но это не сработало, а также я пытался сохранить уровень, а затем перезапустить save.py, но это тоже не сработало

Основной файл

from tkinter import messagebox
from tkinter import *
from save import *


moneyvar = IntVar()
moneyvar.set(money)
moneyvariable = str(moneyvar)
levelvar = IntVar()
levelvar.set(level)
levelvariable = str(levelvar)

money = money + 100
level = level + 1
moneyvar.set(money)
levelvar.set(level)

def missions():
    missionbox = canvas.create_rectangle(0,0,700,650, fill = "#87ceeb")
    missiontext = canvas.create_text(350,50,font="arial 20 bold", text="Missions")
    backbtnmission = Button(text = "Back",font="arial 10 bold", bg="black", fg = "white", relief = FLAT, command = lambda: closemissions(missionbox, winm1, winm2, winb1, missiontext, winm3, winm4))
    winb1 = canvas.create_window(350, 80, window = backbtnmission)
    m1 = Button(text = "Tutorial",font="arial 10 bold", bg="black", fg = "white", relief = FLAT)
    winm1 = canvas.create_window(350, 110, window = m1)
    m2 = Button(text = "Locked",font="arial 10 bold", bg="black", fg = "white", relief = FLAT, state=DISABLED)
    winm2 = canvas.create_window(350, 140, window = m2)
    m3 = Button(text = "Locked",font="arial 10 bold", bg="black", fg = "white", relief = FLAT, state=DISABLED)
    winm3 = canvas.create_window(350, 170, window = m3)
    m4 = Button(text = "Locked",font="arial 10 bold", bg="black", fg = "white", relief = FLAT, state=DISABLED)
    winm4 = canvas.create_window(350, 200, window = m4)
    if level >=1:
        m2.configure(state = NORMAL, text = "Insert Mission Name Here")
    if level >=2:
        m3.configure(state = NORMAL, text = "Insert Mission Name Here")
    if level >=3:
        m4.configure(state = NORMAL, text = "Insert Mission Name Here")

Save.py

money = 0
level = 0

Полагаю, я могу просто нажимать на миссии и видеть, что следующая миссия не отключена, но я должен сохранить и перезапустить программубольше не отключается

Спасибо

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете попробовать importlib.reload. Например,

.
├── dynamic
│   ├── __init__.py
│   ├── levels.py
├── __init__.py
└── reload_vals.py

reload_vals.py

from importlib import reload


def reload_vars():
    try:
        from dynamic import levels
        reload(levels)
        print(levels.level)
    except Exception as e:
        print('could not load module')
        print(e)


import time

if __name__ == "__main__":
    while True:
        time.sleep(1)
        reload_vars()

levels.py

level = 102

Это будет перезагружать новые значения уровня каждую секунду (при условии, что что-то обновляетсяlevels.py. Вместо этого вы можете поставить условие для перезагрузки.

Однако это не очень хороший подход. Рассмотрите возможность использования небольшой базы данных, такой как SQLite, для хранения состояния вашей игры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...