Изменение состояния логического значения внутри списка из функции? - PullRequest
0 голосов
/ 13 января 2019

Я хочу настроить графический интерфейс для моего приложения командной строки, я использую tkinter для этой работы. Я хочу сделать холст, который выступает в качестве замены, с двумя изображениями, которые должны меняться всякий раз, когда пользователь нажимает на холст.

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

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

Сначала я попытался объявить переменную внутри инициализации GUI, но понял, что логическое значение сбрасывается при каждом цикле.

После этого я попытался объявить их внутри init (). Что работает, если я использую только одну переменную, просто используя ее непосредственно в функции.

Поэтому я подумал, что если я возьму все эти переменные внутри списка, то я могу использовать цикл for в списке и проверить, соответствует ли место в памяти параметру, и если это так, следует проверить значение и затем изменить его. ,

Но, видимо, в этот момент я заметил, что у меня есть кое-какое обучение. Вот код:

class UploadGUI(tkinter.Tk):
    def __init__(self, master):
        tkinter.Tk.__init__(self, master)
        self.master = master
        self.item_state = True
        self.variation_state = True
        self.active_state = True
        self.barcode_state = True
        self.initialize()

    def initialize(self):
        ...
        if(isfile('.../checkbox-unchecked.png')):
            self.uncheckedimg = tkinter.PhotoImage(file='.../checkbox-unchecked.png')
        ...
        self.itemup_check = tkinter.Canvas(width=150,height=40,bg=self.bg
                                       , bd=0, highlightthickness=0)
        self.itemup_check.bind("<Button-1>", lambda event, item = self.itemup_check, check = self.item_state, image1 = self.uncheckedimg, image2 = self.checkedimg : self.switchImage(item, check, image1, image2))

        self.itemup_check.create_image(0,0,image=self.uncheckedimg,anchor="nw")
        self.itemup_check.grid(column=0, row=4,sticky="EW")
        ...


    def switchImage(self, element, check, image1, image2):
        print(id(check))
        for state in [self.item_state]:
            print(id(state))
            if(id(check) == id(state)):
                if(state):
                    element.create_image(0,0,image=image1,anchor="nw")
                else:
                    element.create_image(0,0,image=image2,anchor="nw")
                state = not state
                print(id(state))

Я понял, что область памяти меняется между двумя отпечатками состояния, и я чувствую, как важно понять, что там происходит.

Выход на консоль:

10744128

10744096

В целях тестирования я включил в цикл for только одну переменную состояния, обычно их было бы четыре.

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