我想知道如何实现一个包含按钮的窗口,当单击此按钮时会出现另一个窗口,我不知道如何实现该
答案 0 :(得分:3)
首先,我强烈建议您阅读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中并不特殊,只是说#34;这个标识符是一个类。"我们还为此新框架添加了标签"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在Racket中有其他gui和渲染系统,例如big-bang
。我假设您尝试使用默认的racket/gui
集合启动并运行。