如何使用Dr racket中的按钮从一个窗口移动到另一个窗口?

时间:2018-01-03 17:04:38

标签: racket

我想知道如何实现一个包含按钮的窗口,当单击此按钮时会出现另一个窗口,我不知道如何实现该

1 个答案:

答案 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之外没有任何内容引用它,这是在创建按钮时设置的。

现在,如果您运行该程序,您应该看到类似的内容:

GUI Example

单击按钮时没有任何反应。 button%类在创建时采用callback参数。只要按下按钮,它就会调用该函数。回调本身必须接受两个参数,但对于许多简单的回调,我们可以忽略它们。这使得是新的按钮类:

(new button% [parent fr]
     [label "Click Me!"]
     [callback (lambda (this event)
                 ...)])

现在,你说你想在点击按钮时创建一个新框架。根据我在这里给你的内容,你能想出要在...创建(并展示)一个新框架的内容吗?

1在Racket中有其他gui和渲染系统,例如big-bang。我假设您尝试使用默认的racket/gui集合启动并运行。