2017-01-17 8 views
-1

У меня есть эта ошибка с виджетами tkinter внутри одного из моих классов. То, что я не понимаю, действительно то, что ошибка пытается рассказать мне и где я пошла не так. Здесь ошибка я получаю, когда я бегу код:Python - виджеты tkinter не работают, более того, я не понимаю трассировку, я получаю

File "/usr/lib/python3.5/tkinter/ttk.py", line 553, in __init__ 
    tkinter.Widget.__init__(self, master, widgetname, kw=kw) 
File "/usr/lib/python3.5/tkinter/__init__.py", line 2142, in __init__ 
    (widgetName, self._w) + extra + self._options(cnf)) 
    _tkinter.TclError: unknown option "-command" 

Вот код:

def play(): 
     while True: 
      if self.questions_asked == 20: 
       answer_label = ttk.Label(self , text="That's the end of the quiz. Your score for that round was {}! ") 
       answer_label.pack() 
       break 
      self.random_question = random.randint(0,39) 

      while not self.random_question in self.questions: 
       self.random_question = random.randint(0,39) 

      question_label = ttk.Label(self, text="Question {} : {}".format(i , self.questions[self.random_question])) 
      question_label.pack() 

      check_answer = ttk.Button(self, text="Check your answer.", command=lambda:check()) 
      check_answer.pack() 

      remove_key(self.random_question, self.questions) 
      remove_key(self.random_question, self.answers) 
      self.questions_asked +=1 

     def check(): 

      get_user_entry = entry_box.get() 
      if get_user_entry == None: 
       question_label = tkinter.Label(self, text="Please put an answer into the entry box.") 
       question_label.pack() 

      if get_user_entry == "end": 
       question_label = tkinter.Label(self, text="Thanks for playing! ") 
       question_label.pack() 
       lambda: shown_frame.show_frame(OpeningFrame) 

      else: 
       verify_answer(get_user_entry, self.random_question, self.questions) 
       if verify_answer == True: 
        answer_label = ttk.Label(self, text="You got it correct !") 
        answer_label.pack() 
       else: 
        answer_label = ttk.Label(self, text="Sorry the answer was {}".format(self.answers[self.random_question])) 
        answer_label.pack() 


    overhead_label = ttk.Label(self, text="Welcome to the Quiz page. Click the button below to start.") 
    overhead_label.pack() 

    entry_box = tkinter.Entry(self) 
    entry_box.pack() 

    start_quiz = ttk.Button(self, text="Start the quiz.", command=play()) 
    start_quiz.pack() 


    home_button = ttk.Button(self, text="Go back to home page", command=lambda: shown_frame.show_frame(OpeningFrame)) 
    home_button.pack(pady=15, padx=15) 
+0

Когда вы назначаете команду своей кнопке 'start_quiz', назначьте ** вызываемый **' play' вместо того, чтобы называть его ('play()'), когда вы его назначаете. Например: '..., command = play)' – Jkdc

+0

Ваш код не может работать так, как он есть, поэтому я не вижу ошибки. Ни импорт, ни класс, содержащие функцию воспроизведения, отсутствуют. Вы должны опубликовать самый маленький исполняемый код, который вызывает ошибку. –

+0

всегда показывает FULL сообщение об ошибке (Traceback). Вы показываете только часть сообщения, и я не вижу, какая строка в вашем коде создает проблему. Некоторые виджеты не имеют 'command =' - но вы используете 'command =' с этим типом виджета, и это ваше сообщение об ошибке. – furas

ответ

0

Вы не показали полный сообщение об ошибке (Traceback) - он должен показать линию ваш код, который создает проблему.

Я думаю, вы используете command= с виджетами, у которых нет этой опции - и это ваше сообщение об ошибке.

+0

Нет, это была полная трассировка. Я дважды проверил его и не включил номер строки. –

+0

Да, это я, я использовал команду над виджетами лейбла ... спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^