Я хочу настроить графический интерфейс для моего приложения командной строки, я использую 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 только одну переменную состояния, обычно их было бы четыре.