IDL: виджет кнопки перестает обновляться после одного нажатия

Я довольно новичок в IDL, и в качестве способа обучения я попытался создать игру на угадывание чисел. У меня есть виджет с тремя кнопками: одна сообщает программе, что число, о котором вы думаете, больше, чем то, о котором спрашивает компьютер, одна, если оно меньше, и одна, если оно правильное.

Моя проблема в том, что после того, как вы нажали большую кнопку, если вы нажмете ее снова, она ничего не сделает. Например. программа начинает угадывать 500, если я нажимаю больше, она угадывает 750. Если я сейчас снова нажму больше, программа не отвечает.

Мой код такой:

PRO test1_event, ev

WIDGET_CONTROL, ev.top, GET_UVALUE = stash

minimum = 0
maximum = 1000

IF (ev.Id EQ largerbutton) THEN BEGIN
  minimum = (minimum+maximum)/2
  maximum = maximum
ENDIF
IF (ev.Id EQ smallerbutton) THEN BEGIN
  maximum = (minimum+maximum)/2
  minimum = minimum
ENDIF
IF (ev.Id EQ correctbutton) THEN BEGIN
  help2 = string('I got it!')    ;This prints to a text widget
ENDIF

END

PRO test1

  wBase = WIDGET_BASE(X_SCROLL_SIZE = 512, Y_SCROLL_SIZE = 512)
  ;wDraw = WIDGET_WINDOW(wBase, X_SCROLL_SIZE = 512, Y_SCROLL_SIZE = 512)
  Lower = WIDGET_BUTTON(wBase, VALUE = 'Smaller', XOFFSET = 60, YOFFSET = 250)
  Higher = WIDGET_BUTTON(wBase, VALUE = 'Larger', XOFFSET = 225, YOFFSET = 250)
  Correct = WIDGET_BUTTON(wBase, VALUE = 'Correct', XOFFSET = 380, YOFFSET = 250)

  minimum = 0
  maximum = 1000

  help1 = string('Please think of a number between' + string(minimum) + ' and ' + string(maximum))
  help2 = string('Is your number ' + string((minimum + maximum)/2) + '?')
  wText = WIDGET_TEXT(wBase, VALUE = ['Welcome to my little game. I will now         try and guess a number you are thinking of.'], XSIZE = 63,XOFFSET = 50, YOFFSET = 100)
  wText1 = WIDGET_TEXT(wBase, VALUE = help1, XSIZE = 63,XOFFSET = 50, YOFFSET = 120)
  wText2 =  WIDGET_TEXT(wBase, VALUE = help2, XSIZE = 63,XOFFSET = 50, YOFFSET = 140)

  stash = {text1:wText, text2:wText1, text3:wText2, $
lower:Lower, higher:Higher, correct:Correct, minimum:minimum, maximum:maximum}

  WIDGET_CONTROL, wBase, SET_UVALUE = stash, /REALIZE
  XMANAGER, 'test1', wBase

end

Я пробовал использовать цикл while, а также REPEAT, но затем программа просто доходит до 999, если я нажимаю большую кнопку, и до 0, если я нажимаю меньшую.

Есть идеи, что я могу сделать?

РЕДАКТИРОВАТЬ: добавлена ​​​​остальная часть программы


person sCuper    schedule 17.08.2017    source источник
comment
Похоже, вам не хватает части вашего кода. Сохраняются ли кнопки большего и меньшего размера в тайнике? Вы вызываете XMANAGER, чтобы начать обработку событий? Наконец, как вы храните минимум и максимум? Пожалуйста, выложите всю программу.   -  person Chris Torrence    schedule 18.08.2017
comment
Спасибо за отзыв, добавил остальные программы.   -  person sCuper    schedule 21.08.2017


Ответы (1)


Я думаю, что кнопки работают нормально, но ваш обработчик событий на самом деле ничего не делает. Во-первых, мне нужно было изменить большую кнопку, маленькую кнопку и правильную кнопку, чтобы они были stash.higher, stash.lower, stash.correct. Затем ваш код вычисляет новый минимум и максимум, но на самом деле ничего с ними не делает.

Я помещаю оператор печати в код события, и он определенно получает нажатия кнопок.

В вашем обработчике событий вы, вероятно, захотите использовать widget_control для обновления текстового поля новым предположением.

person Chris Torrence    schedule 22.08.2017