Lisp 是否存在McCLIM Click侦听器?

Lisp 是否存在McCLIM Click侦听器?,lisp,common-lisp,clim,mcclim,Lisp,Common Lisp,Clim,Mcclim,我一直在努力学习McCLIM,考虑到文档的简洁性,这是相当困难的。阅读之后,我还没有弄明白如何将单击与窗格关联并运行命令。我知道我可以定义如下命令: (define-app-command (com-say :name t) () (format t "Hello world!")) 然后在命令框中键入Say,让它执行某些操作。我想单击一个窗格,让它在单击时输出这个hello world字符串 要在给定窗格上启用单击侦听器,我需要设置什么?至少有两种方法可以做到这一点。

我一直在努力学习McCLIM,考虑到文档的简洁性,这是相当困难的。阅读之后,我还没有弄明白如何将单击与窗格关联并运行命令。我知道我可以定义如下命令:

(define-app-command (com-say :name t) ()
  (format t "Hello world!"))
然后在命令框中键入
Say
,让它执行某些操作。我想单击一个窗格,让它在单击时输出这个hello world字符串


要在给定窗格上启用单击侦听器,我需要设置什么?

至少有两种方法可以做到这一点。第一种是使用
演示文稿
演示文稿来命令翻译人员
,第二种是使用诸如
按钮
之类的小工具(即widget)。我想您还没有学习过
演示文稿
,因此我将向您展示如何使用小工具

下面的示例将有一个窗格和一个按钮。当您单击该按钮时,您将看到“Hello World!”输出到窗格

;;;;首先加载McCLIM,然后将其保存在文件中并加载。
(包中#:clim用户)
(定义应用程序框架示例()
()
(:窗格)
(app:application)
:滚动条:垂直
:宽度400
:高度400)
(按钮:按钮
:标签“问候语”
:激活回拨
(lambda(窗格和其余参数)
(声明(忽略窗格参数))
;在McCLIM中,`t`或*标准输出绑定到
;类型:应用程序,在本例中为“应用程序”窗格。
(格式t“Hello World!~%”)
(:布局)
(默认值(垂直()应用程序按钮)))
(取消运行()
(运行框架顶层(生成应用程序框架示例)))
(clim用户::运行)

另外,学习如何在McCLIM中做一些事情的一种方法是运行并查看
clim demos
。一旦你发现了一些有趣的东西,并想知道它是如何完成的,请在McCLIM source的
Examples
目录中查看它的源代码

要获得帮助,最好使用IRC聊天室(libera.chat上的clim),多个McCLIM开发人员可以在其中闲逛


编辑:第二个示例,带有
演示文稿到命令转换器
,单击窗格中的任意位置将在窗格中输出“Hello World!”

(包中#:clim用户)
(定义应用程序框架示例()
()
(:窗格:应用程序)
:宽度400
:显示时间(零)
;; 注意上面的“:display time nil”选项,没有默认的McCLIM命令循环
;; 将在每次运行命令后清除窗格。在以前的版本中不需要它
;; 示例,因为不涉及任何命令。
(定义示例命令(com-say:name-t)
()
(格式t“Hello World!~%”)
(定义演示文稿以命令翻译人员打招呼
(空白区域com示例:手势:选择)
(obj)
零)
(取消运行()
(运行框架顶层(生成应用程序框架示例)))
(clim用户::运行)

这样做是可能的。如果你在这里没有得到答案,在mcclim邮件列表上询问可能会很有用。这是一个很棒的小工具示例,但是你介意设置一个与窗格上的单击信号相对应的示例吗?很高兴在那之后进行绿色检查。我用第二个例子更新了我的答案。