Ошибка получения значений из объектов, созданных функцией кнопки - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю над небольшим проектом, и у меня возникают проблемы с получением значений, хранящихся в комбинированных полях.В программе есть кнопка «плюс», которая создает дополнительные поля под существующими.Они создаются путем вызова функции «создать», которая создает новый экземпляр класса ComboBox, где поле создается и выводится на экран.Затем предполагается, что отдельная функция «submit» проходит цикл, извлекает все значения блоков и сохраняет их в списке.Мой главный недостаток в том, что я использовал данные в именах переменных, но я понятия не имею, как еще сделать это в этом сценарии.У кого-нибудь есть альтернативное решение?

(есть некоторые закадровые переменные, которые здесь показаны в качестве параметров, но определенно нет источника проблемы)

class ComboBox:
    def __init__(self, master, counter, fields):
        self.master = master
        self.counter = counter
        self.fields = fields

        self.field_box = ttk.Combobox(width=20)
        self.field_box["values"] = fields
        self.field_box.grid(row=counter + 1, column=0, pady=5)

    def get_value(self):
        value = self.field_box.get()
        return value
def create():
    global entry_counter
    name = "loop"+str(entry_counter-1)
    name = ComboBox(window, entry_counter, fields)
    values.append(name.get_value())
    entry_counter += 1


def submit():
    for i in range(1, entry_counter):
        name = "loop" + str(entry_counter-1)
        values.append(name.get_value())

Например, если бы я создал 2 поля и выбрал опции «test1» и «test2», я бы хотел, чтобы список моих значений содержал ["test1, "test2"]

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Не уверен, что я правильно понял вопрос, но, наверное, вы спрашиваете о том, как зацикливать все экземпляры ComboBox.Вы можете просто создать глобальный массив, добавить новый экземпляр в него методом create():

comboboxes = []
def create():
    ...
    comboboxes.append(new_instance)

def submit():
    for combobox in comboboxes:
        ...
1 голос
/ 22 апреля 2019

Вы на правильном пути с .get().Я считаю, что ваше решение состоит в том, что вашей функции get_value также необходим параметр event:

def get_value(self, event):
    value = self.field_box.get()
    return value

См. Следующее:

Получение выбранного значения из выпадающего списка в Tkinter

Получение и использование списка со списком tkinter

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