Python функция пропускает обязательный аргумент, несмотря на то, что написано - PullRequest
0 голосов
/ 06 января 2020

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

def ShowQuestion(quiz, instance, questionsAnswered, questionsdone, question, user_answer, check_answer, data):

    user_answer.focus_set()
    if instance == 0:

        question_set = random.sample(data,5)

    questionask = random.choice(question_set)

    current_question = questionask['question']

    question.config(text=current_question)

    question_set.remove(questionask)

    check_answer.config(command = lambda : Question.Checkanswer(quiz, instance, questionsAnswered, questionsdone, question, user_answer))
    check_answer.grid(row = 5, column = 3)


def Checkanswer(quiz, choicer, instance, questionsAnswered, questionsdone, question, user_answer):
    #print (choicer)
    questionsdone += 1
    if type(user_answer.get()) == str:
        user_answer = str(user_answer.get()).lower()
    else:
        user_answerwrong = user_answer.get()

    if user_answer in question_answer:
        correct_question +=1
    else:
        pass

    if questionsAnswered == 5:
        messagebox.showwarning("Final Score","Game Over \n Final Score: %s \n" %(self.user_score))
        quiz.destroy()
    else:
        instance +=1
        user_answer.delete(0, 'end')
        Question.ShowQuestion(quiz, instance, questionsAnswered, questionsdone, question, user_answer, check_answer, data)

1 Ответ

2 голосов
/ 06 января 2020

Несоответствие между списком аргументов в функции, вызываемой этой lambda функцией (6 аргументов):

    check_answer.config(command = lambda : Question.Checkanswer(quiz, instance, questionsAnswered, questionsdone, question, user_answer))

и определением функции (7 аргументов):

def Checkanswer(quiz, choicer, instance, questionsAnswered, questionsdone, question, user_answer):

Вы пропустили аргумент choicer. Либо передайте его, либо удалите аргумент из определения функции (поскольку вы не используете его в теле функции).

Примечание. Без остального кода я не уверен, как интерпретировать Question объект - будь то модуль, ссылающийся на область локального файла или класс. Поэтому я предположил, что Question.Checkanswer относится к данной функции Checkanswer.

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