我想知道如何实现一个包含按钮的窗口,当单击此按钮时会出现另一个窗口,我不知道如何实现
首先,我强烈建议你阅读Racket GUI Docs,特别是the first part,因为它包含一些关于入门的好信息.1
与许多GUI工具包一样,您可以使用窗格作为子窗口构建框架,这些窗格一直有自己的子窗格,直到最终到达按钮和文本字段等原始窗口小部件。 racket/gui
系列使用Racket的类系统。首先,确保程序的第一行读取#lang racket/gui
。接下来,创建(和显示)窗格只是:
(define fr (new frame% [label "Frame Generator"]))
(send fr show #t)
在这里,frame%
是一个类,%
在Racket中并不特别,只是说“这个标识符是一个类”的惯例。我们还给这个新框架一个标签"Frame Generator"
,并将其绑定到fr
。最后,我们展示了框架。如果这个程序使用C风格语法,它看起来像:
var fr = new Frame(lebel="Frame Generator");
fr.show(true);
此时如果您运行程序,您的框架将在技术上出现,但它将是如此之小,您将很难找到它。所以我们为你的框架添加一个按钮:
(new button% [parent fr]
[label "Click Me!"])
我们没有打扰绑定按钮,因为除了fr
之外没有任何引用它,这是在创建按钮时设置的。
现在,如果你运行该程序,你应该看到类似的东西:
当您单击按钮时没有任何反应。 button%
类在创建时采用callback
参数。只要按下按钮,它就会调用该函数。回调本身必须接受两个参数,但对于许多简单的回调,我们可以忽略它们。这使得是新的按钮类:
(new button% [parent fr]
[label "Click Me!"]
[callback (lambda (this event)
...)])
现在,你说你想在点击按钮时创建一个新框架。根据我在这里给你的内容,你能想出在...
中创建(和展示)一个新框架的内容吗?
1在球拍中还有其他gui和渲染系统,如big-bang
。我假设您正在尝试使用默认的racket/gui
集合启动并运行。