Где я могу назначить переменную, чтобы она использовалась в функции (внутри класса)? - PullRequest
0 голосов
/ 23 апреля 2019

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

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

    i = 1

    def saveVars(i):
        if i == 1:
            product1.productName = self.prodName.get()
            product1.productID = self.prodID.get()
            product1.productSize = self.prodSize.get()
            product1.productPrice = self.prodPrice.get()
            product1.productQuant = self.quantity.get()
        elif i == 2:
            product2.productName = self.prodName.get()
            product2.productName = self.prodID.get()
            product2.productSize = self.prodSize.get()
            product2.productPrice = self.prodPrice.get()
            product2.productQuant = self.quantity.get()
        elif i == 3:
            product3.productName = self.prodName.get()
            product3.productName = self.prodID.get()
            product3.productSize = self.prodSize.get()
            product3.productPrice = self.prodPrice.get()
            product3.productQuant = self.quantity.get()
        newProduct()
        i += 1
        return i

Я ожидаю, что он переключит переменную, в которую сохраняются записи, на следующий соответствующий продукт, основанный на функции +1, у меня он возвращает функцию i в качестве нового i, который затем должен сохранить записи вследующая переменная в процессе, но она постоянно говорит мне, что я «пропускаю 1 обязательный позиционный аргумент»: «i»

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы пытаетесь вызвать функцию без параметра, поскольку атрибут command не принимает параметры, а только имя функции.

Для передачи параметров вы можете использовать partial форму functools пакет

оператор импорта:

from functools import partial

ваш вызов функции будет выглядеть так:

addItemButton = Button(window, text = "Add to Cart", fg='black',bg='yellow',width = 10, height = 2, command = partial(saveVars,i)) addItemButton.place(x=800,y=375)

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

0 голосов
/ 23 апреля 2019

В некоторых случаях кажется, что вы вызываете saveVars без параметра. Чтобы предотвратить это, вы можете установить значение по умолчанию i, например.

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