IDL:Button Widget在一次推送后停止更新
问题描述:
我是IDL的新手,并且作为一种学习方式,我尝试创建一个猜数字游戏。我有一个有三个按钮的小工具:一个告诉程序你正在考虑的数字大于计算机询问的数字,一个小于一个,另一个正确。IDL:Button Widget在一次推送后停止更新
我的问题是,一旦你按下了,即更大的按钮,如果你再次按下它,它不会做任何事情。例如。程序开始猜测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想说,但如果我按大按钮和0,如果我按计划只是去一直到999更小。
任何想法,我可以做什么?
编辑:添加程序
答
的其余部分,我认为这些按钮工作正常,但您的事件处理程序实际上并没有做任何事情。首先,我需要将更大的按钮,更小的按钮和正确的按钮更改为stash.higher,stash.lower,stash.correct。然后,您的代码会计算最大新的最小值&,但实际上并没有对它们做任何事情。
我把一个打印语句放到事件代码中,它肯定会得到按钮按下。
在您的事件处理程序中,您可能希望使用widget_control更新带有新猜测的文本框。
它看起来像你缺少一些你的代码。在“藏匿”中存储“大按钮”和“小按钮”吗?你打电话给XMANAGER开始事件处理吗?最后,你如何存储“最小”和“最大”?请发布您的整个程序。 –
感谢您的反馈,添加了程序的其余部分。 – sCuper