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

问题描述 投票:0回答:1

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

racket
1个回答
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中并不特别,只是说“这个标识符是一个类”的惯例。我们还给这个新框架一个标签"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在球拍中还有其他gui和渲染系统,如big-bang。我假设您正在尝试使用默认的racket/gui集合启动并运行。

© www.soinside.com 2019 - 2024. All rights reserved.