Вот теперь стало понятнее. Ваша примерная архитектура:
user = {"active": "X", "passive": "O"}
#
def get_questions(theme):
# здесь организуете получение вопроса в зависимости от темы и возвращаете вопрос, возможные
# ответы и позицию правильного ответа
return question, ansvers, position
#
def create_question_panel(question, ansvers):
# здесь Вы строите toplevel с вопросом и возможными ответами и возвращаете ответ, который выбран
return ansver
#
def analysis_bind(event):
# основной обработчик событий
global user
if event.widget["state"] == "normal": # проверяем, можно ли использовать вопрос
theme = event.widget["text"]
question, ansvers, position = get_questions(theme)
user_ansver = create_questions_panel(questions, ansvers)
if ansvers.index(user_ansver) == position: # анализ верности ответа
event.widget["text"] = user["active"]
else:
event.widget["text"] = user["passive"]
event.widget["state"] = "disabled" # отключаем вопрос, чтобы нельзя было больше нажать
user["passive"], user["active"] = user["active"], user["passive"] # меняем пользователей местами
#
# здесь Вы создаете все кнопки и привязываете к ним событие analysis_bind и запускаете .mainloop()
Как-то так.
Забыл сказать. analysis_bind будет работать в том случае, если указаны темы на кнопках. Чтобы устранить эту проблему можно заранее связать темы с кнопками. Так как кнопка - это всего лишь класс, то можно без проблем добавить к нему свой атрибут. Делается это так:
but = Tkinter.Button(root, text="")
but.theme = "first theme"
# если темы собраны в списке, то
but.theme.pop(0)
Тогда, чтобы получить в analysis_bind тему нажатой кнопки, нужно:
theme = event.widget.theme
P.S. Будут вопросы - пишите…