переменная, передаваемая через параметры, не обновляется - PullRequest
0 голосов
/ 06 декабря 2018

Пользователь выбирает цель, которая затем меняет цветовую схему фона.У меня это работает, однако, когда запускается новая функция, цветовая схема возвращается к исходной.

Когда цель выбрана, вызывается одна из этих функций (в зависимости от того, какая цель выбрана.

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(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 показано, что происходит после выбора цели Get Fit. Это хорошо работает.

Рисунок B demonпрослеживает то, что происходит после выбора цели подготовки, а затем после запуска учетной записи.Как видите, цветовая схема возвращается.A

B

1 Ответ

0 голосов
/ 07 декабря 2018

Мне удалось решить эту проблему!

Проблема заключалась в том, что изменения, внесенные в goal, оставались локальными для функции.То, что я должен был сделать, возвращает цель, чтобы все изменения, внесенные в функцию, были внесены в другие функции.Я сделал это просто путем глобализации переменной.Вы должны быть осторожны при глобализации переменных, однако в этом случае я считаю, что все в порядке!

def Get_Fit():
    canvas.delete("all")
    goal = "fit"
    global goal
    Overlay(goal)
    Bottom(goal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...