Когда я нажимаю на кнопку с галочкой в моем проекте, она не выполняет правильную функциональность. Проект можно найти по адресу https://github.com/shitwolfymakes/Endless-Sky-Mission-Builder/ (Indev Branch)
Я создаю приложение с использованием tkinter и работаю над функцией динамического размещения объектов ttk.Entry рядом с объектами ttk.Checkbutton, а затем связываю их вместе.
Я уже несколько раз переписывал эту функцию и даже добавил специальный случай, когда self.numMandatory равен 0, но ничего не помогло.
Это взято из guiutils.py, строка 323.
# add the optional fields
for i in range(self.numMandatory, self.numFields):
print(self.rowNum)
self.listEntryStates.append(BooleanVar())
self.listEntryData.append(StringVar())
self.listEntryData[-1].set(self.listDefaultEntryData[i])
self.listEntries.append(ttk.Entry(self, textvariable=self.listEntryData[-1], state=DISABLED, style="D.TEntry"))
self.listEntries[-1].grid(row=self.rowNum, column=1, sticky="ew")
#print(self.listEntryStates[-1])
#print(self.listEntries)
self.listCheckbuttons.append(ttk.Checkbutton(self, onvalue=1, offvalue=0, variable=self.listEntryStates[-1],
command=lambda: self.cbValueChanged(self.listEntryStates[-1],
[self.listEntries[-1]])))
self.listCheckbuttons[-1].grid(row=self.rowNum, column=2, sticky="e")
print(self.listCheckbuttons[-1].__str__(), end=" is bound to: ")
print(self.listEntries[-1].__str__(), self.listEntryStates[-1])
self.rowNum += 1
# end for
Это взято из guiutils.py, строка 349
def cbValueChanged(self, entryState, modifiedWidgets):
for widget in modifiedWidgets:
print("The value of %s is:" % widget, end="\t\t")
print(entryState.get())
if type(widget) is str:
break
elif entryState.get() is True:
widget.config(state='enabled', style='TEntry')
elif entryState.get() is False:
widget.config(state='disabled', style='D.TEntry')
#end for
#end cbValueChanged
В главном окне, когда я прокручиваю вниз и нажимаю «добавить триггер», новое окно отображается правильно. Но когда я нажимаю на кнопку с галочкой рядом с записью, которая говорит "[<base#>]"
, эта запись должна быть включена cbValueChanged.
По какой-то причине, когда цикл добавления необязательных полей выполняется, секция command = связывает только последнюю запись в self.listEntries (но запись, с которой она связывает каждую кнопку-флажок, не создается до самого последнего времени через петля)
Я не уверен, где еще я мог бы задать такой вопрос, и я знаю, что он задает больше, чем большинство вопросов. Если вам понадобится дополнительная информация, я с радостью ее предоставлю.