“退出”是使用按钮退出 Racket 中 gui 应用程序的正确方法还是其他最适合此目的的方法?
(define myfr
(new frame% [label "myframe"] [width 100] [height 100] ))
(new message% [label "my gui app"][parent myfr])
(define exitbutton
(new button% [parent myfr] [label "Exit"]
[callback (lambda (b e) (exit) )]))
(send myfr show #t)
我发现 DrRacket 在使用退出按钮时给出“交互已禁用”警告消息,但在使用框架的 [x] 按钮关闭时会干净退出。
我在此页面上找到了“on-exit”方法,但没有找到实际的退出方法:https://docs.racket-lang.org/gui/frame_.html?q=frame%25 。 https://docs.racket-lang.org/reference/Exiting.html 上也没有提到任何具体内容。
我相信以下语句只会隐藏框架而不会关闭应用程序:
(send myfr show #f)
最佳答案
exit
绝对是您想要结束应用程序的方式。然而,当你执行此操作时,DrRacket 中的 REPL 会停止的原因是因为你的程序不再运行,每当你调用 exit 时就会发生这种情况,即使你的程序中没有 gui。
您也正确地认为:
(send myfr show #f)
将隐藏窗口但不会实际退出应用程序。
因此,您可以做的一件事就是尝试测试您是否在 DrRacket 中运行。如果您是这样,只需关闭窗口,并在用户单击“kill”或启动新程序后让 DrRacket 退出应用程序,而不是退出程序。
这样做的问题是,通常无法检测您是否在沙箱中运行。您可以采取一些技巧来测试这一点,但它不是很强大:
Determin if a racket program is in a sandbox
另一种方法是创建您自己的沙箱,并在该沙箱中运行您的程序(这就是 DrRacket 实际运行您的代码的方式)。然后,当你的程序退出时,仍然会有一个可用的repl。尽管请注意,repl 将用于沙箱本身,而不是其所在的 repl。
这是 creating a sandbox. 的文档
关于user-interface - 如何在 Racket 中没有框架的 [x] 按钮的情况下退出 GUI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38955027/