Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 24, 2013 14:27:05

4emp1ON
Зарегистрирован: 2013-04-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с Tk

def answer(num): #функция проверки
    print("Выбран ответ ",num)
    if num!=data[2]:
        return False
        print('false')
    else:
        return True
        print('true')
ans1=Button(root, text = "1") #ответ 1
ans2=Button(root, text = "2") #ответ 2
ans3=Button(root, text = "3") #ответ 3
ans1.bind("<Button-1>", answer(1))
ans2.bind("<Button-1>", answer(2))
ans3.bind("<Button-1>", answer(3))
ans1.pack()
ans2.pack()
ans3.pack()
Добрый день, пытаюсь заставить работать ткинтер как следует, а он ни в какую. Помогите кто чем может. В попытке создать подобие теста пришел к вышеприведенному примеру(точнее, выписки из него).
Проблема в следующем:
По идее от всей этой конструкции требуется создать 3 кнопки, которые будут соответствовать вариантам ответа 1, 2 либо 3. И нажатие одной из них передает в функцию проверки числа, соответствующие выбранному варианту ответа. Но при запуске приложения сразу выводится в консоль
Выбран ответ 1
Выбран ответ 2
Выбран ответ 3,
и далее на нажатия кнопок окно не реагирует.

p.s. так же был опробован вариант с
ans1=Button(root, text = "1", command=answer(1)) #ответ 1
, но к сожалению, результат идентичный.

Отредактировано 4emp1ON (Апрель 24, 2013 14:38:28)

Офлайн

#2 Апрель 24, 2013 21:14:09

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите пожалуйста с Tk

Вам нужно разобраться в следующей разнице:
Что такое объект результата вызова функции и объект функции.
Почитайте М. Лутца. Сейчас я дам Вам ответ, но если Вы не почитаете - дальше будет значительно хуже.
По Вашему вопросу есть два варианта:
I

def answer(event, num):
    print("Выбран ответ %s" % (num))
ans1=Button(root, text="1")
ans2=Button(root, text="2")
ans3=Button(root, text="3")
ans1.bind("<Button-1>", lambda event: answer(event, 1))
ans2.bind("<Button-1>", lambda event: answer(event, 2))
ans3.bind("<Button-1>", lambda event: answer(event, 3))
ans1.pack()
ans2.pack()
ans3.pack()
II
def answer(event):
    print("Выбран ответ %s" % (event.widget["text"]))
ans1=Button(root, text="1")
ans2=Button(root, text="2")
ans3=Button(root, text="3")
ans1.bind("<Button-1>", answer)
ans2.bind("<Button-1>", answer)
ans3.bind("<Button-1>", answer)
ans1.pack()
ans2.pack()
ans3.pack()
Выбирайте любой, какой по-душе…

Есть еще парочка вариантов, но Вам их знать пока рановато :)



Отредактировано 4kpt (Апрель 24, 2013 23:58:36)

Офлайн

#3 Апрель 25, 2013 08:15:47

4emp1ON
Зарегистрирован: 2013-04-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуйста с Tk

М. Лутц уже в процессе прочтения. Спасибо большое!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version