变量通过未更新的参数传递

时间:2018-12-06 12:31:03

标签: python tkinter

用户选择一个目标,然后更改背景配色方案。我可以使用它,但是当运行新功能时,配色方案会恢复为原始颜色。

选择目标后,将调用以下功能之一(取决于选择的目标。

def Get_Fit():
    canvas.delete("all")
    goal = "fit"
    Overlay(goal)
    Bottom(goal)

这些功能确定目标,然后调用叠加功能(对于配色方案是合理的)。

def Overlay(goal):
    colour = Goal(goal)
    canvas.create_oval(-2000, 50, 1000, 2000, fill='gray33', outline=colour, width=4)
    canvas.create_oval(-300, 1600, 4000, 300, fill="gray21", outline=colour, width=4)
    canvas.create_text(500, 100, text="EZ FITNESS", font=font3, fill = "gray80")

overlay函数调用另一个称为goal的函数。 goal负责确定配色方案中的颜色。

def Goal(goal):
    if goal == "fit":
        colour="#00e5ff"
    elif goal == "weight":
        colour="#ff00e5"
    elif goal == "strong":
        colour = "#d60000"
    else:
        colour="#ff5d00"
    return colour

每次调用overlay函数时,其调用方式如下:

Overlay(goal)

现在,当我选择一个目标时,配色方案将按预期方式更改。但是,一旦我运行一个新功能(在此示例中为account),配色方案就会恢复为原始颜色。有什么想法吗?这是Account

的代码
def Account():
    canvas.delete("all")
    Bottom(goal)
    Overlay(goal)

    startingweight_label = Label(canvas, width=15, height=1, text="Starting Weight: ", font=font2, bg="gray33", fg="white", relief = "raised", borderwidth=2)
    canvas_startingweight_label = canvas.create_window(475, 350, window=startingweight_label)

    startingweight_entry = Entry(root, width = 10, bg="gray30")
    canvas_startingweight_entry = canvas.create_window(600, 350, window=startingweight_entry) 

这是一些图片 图片A展示了选择“健身”目标后发生的情况。效果很好。

图B演示了选择“达到健康”目标之后,再运行“帐户”之后发生的情况。如您所见,配色方案将还原。 A

B

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题!

问题在于,对goal所做的更改仅保留在该函数的本地。我必须做的是返回目标,以便对功能进行的所有更改都对其他功能进行。我只是通过对变量进行全球化来做到这一点。全球化变量时需要小心,但是在这种情况下,我认为还可以!

def Get_Fit():
    canvas.delete("all")
    goal = "fit"
    global goal
    Overlay(goal)
    Bottom(goal)