У меня есть два окна. Главное окно и окно справки. Я хочу, чтобы окно справки отображалось, когда пользователь нажимает кнопку.
(define help_window (new frame%
[label "Help"]
[parent main_window]
[min-height 400] ;so window size is not 0
[min-width 400])
)
(define (help)
(send help_window show #true)) ;
(define help_button (new button% [parent panel]
[label "Help"]
[callback (lambda (button event) help)] )
)
Моя проблема в том, что если я сделаю (define (help) (...))
, то ничего не получится. Я нажимаю на кнопку, и она не отображается.
Я попытался (define help (...))
, и определение выполняется до нажатия кнопки, и окно появляется за основным окном.
Ядаже не уверен, что я должен использовать лямбду. Там есть учебники, и я не смог заставить программу скомпилировать, вызвав любую другую функцию, кроме лямбды. Кроме того, без передачи (button event)
в вызываемую функцию я даже не уверен, как будет определяться обратный вызов. На самом деле, я понятия не имею, что делает лямбда с (button event)
или вызов функции делает с (button event)
.
Если я пытаюсь [callback help]
с функцией (define (help) ... )
, я получаю ошибку:
initialization for button%: contract violation
expected: (procedure-arity-includes/c 2)
given: #<procedure:syntax_help>
Если я попытаюсь [callback (help)]
с функцией (define (help) ... )
, я получу ошибку:
initialization for button%: contract violation
expected: (procedure-arity-includes/c 2)
given: #<void>