Добрый день,
Я строю (предположим, что) относительно простой вопрос и эксперимент для психологического эксперимента. Я использую холст Pythons для рисования и рисования, но мне кажется, что я наткнулся на кирпичную стену и классический сценарий обновления c. Вот код:
# Replace with 60000 for 1 minute a question
screen_timeout = 10000
start_time = clock.time()
# Create a canvas, mouse & keyboard object
canvas = canvas()
mouse = mouse()
kb = keyboard(timeout=0)
question = '1) Which two chemicals are discussed?'
answer = ''
show_circle = False
global circle_clicked
circle_clicked = False
def draw_question_and_answer(c, a):
c.text('%s<br />(Just start typing; press enter to submit)<br /><br />%s' % (question, a))
def draw_mouse(c, (x, y)):
c.fixdot(x, y)
def draw_circle(c):
c['circle'] = Circle(0, 0, 50, fill=True, color='red')
def paint(c, a, s, (x, y)):
c.clear()
# show_circle_every(s, 2500)
# NOTE Drawing order matters here
if s:
draw_question_and_answer(c, a)
draw_circle(c)
draw_mouse(c, (x, y))
if (x, y) in c['circle']:
circle_clicked = True
else:
draw_question_and_answer(c, a)
c.show()
def game_loop(c, m, a, s):
while True:
if clock.time() - start_time >= screen_timeout:
break
# if clock.time() - start_time >= 2500 and s == False:
# s = True
response, timestamp_kb = kb.get_key()
(x, y), timestamp_m = m.get_pos()
# TODO Extrapolate to function
if s == False:
if response == 'return':
var.gq1 = a
log.write_vars()
break
if response != None and response != 'right shift' and response != 'left shift':
if response == 'space':
a += ' '
elif response == 'backspace':
a = a[:-1]
else:
a += response
paint(c, a, s, (x, y))
# If the user enters the circle it should disappear
print circle_clicked
if clock.time() - start_time >= 2500 and circle_clicked == False:
s = True
game_loop(canvas, mouse, answer, show_circle)
То, что я пытаюсь сделать здесь, это показывать красный круг каждые 2,5 секунды и удерживать его там до тех пор, пока пользовательская мышь не войдет в границу круга. Вот эти строки:
if clock.time() - start_time >= 2500 and circle_clicked == False:
s = True
Я устанавливаю переменную s (show) в True, чтобы показать круг, который работает. И в этой строке:
if (x, y) in c['circle']:
circle_clicked = True
, если пользователь входит в круг, который я задаю, нажмет на true. Но если я распечатаю значения, я вижу, что circle_clicked меняется с True на back False - Как получилось? Получает ли l oop свою собственную версию circle_clicked? Если да, то как?
Что я здесь не так делаю, так как считаю, что это довольно простая проблема? Происхождение просто Javascript фона также усложняет ситуацию, так как я пытаюсь научиться Python делать это.
Спасибо