如何修复从python中的另一个文件更新变量时需要重新启动程序的问题

问题描述 投票:1回答:1

我正在尝试制作游戏,当您升级游戏时,您可以解锁任务并且可以正常运行,但是我必须重新启动程序才能对其进行解锁(水平变量位于另一个文件“ 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

我想能够单击任务并看到下一个任务未禁用,但是我必须保存并重新启动程序,然后才不再禁用它

感谢

python python-3.x tkinter
1个回答
0
投票

您可以尝试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这样的小型数据库来存储游戏状态。

© www.soinside.com 2019 - 2024. All rights reserved.