IDL:Button Widget在一次推送后停止更新

时间:2017-08-17 15:23:21

标签: button widget idl-programming-language

我对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.

我能做什么的想法?

编辑:添加了程序的其余部分

1 个答案:

答案 0 :(得分:1)

我认为按钮工作正常,但您的事件处理程序实际上并没有做任何事情。首先,我需要将更大的按钮,更小的按钮和正确的按钮更改为stash.higher,stash.lower,stash.correct。然后,您的代码计算新的最小值&最大但它实际上并没有对它们做任何事情。

我在事件代码中添加了一个print语句,它肯定会按下按钮。

在您的事件处理程序中,您可能希望使用widget_control来更新带有新猜测的文本框。