gpt4 book ai didi

lisp - McCLIM,如何捕捉击键?

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:16 24 4
gpt4 key购买 nike

我目前正在学习 McCLIM。试图弄清楚如何定义一个命令,该命令将对击键使用react。对于名为 superapp 的应用程序,我有一个函数

(defun show (text)
(lambda (gadget)
(declare (ignore gadget))
(with-slots (text-field) *application-frame*
(setf (gadget-value text-field)
text))))

在它的屏幕面板上显示一些文本。它适用于 activate-callback 中的 Pane 按钮。然而,这

(define-superapp-command (com-greet :name t :keystroke (#\g :control)) ()
(show "Hey"))

没用。我知道我对它的定义是正确的,因为它与 (frame-exit *application-frame*) 配合得很好。所以我只是不明白其他事情。

编辑:所以,这是工作变体

(define-application-frame superapp ()
()
(:panes
(tf1
:push-button
:label "Left"
:activate-callback (show "HI"))
(app :application
:display-time nil
:height 400
:width 600)
(screen :text-field))
(:layouts
(default
(with-slots (text-field) *application-frame*
(vertically ()
screen
(tabling (:grid t)
(list tf1 app)))))))

(defun show (text)
(lambda (gadget)
(declare (ignore gadget))
(setf (gadget-value (find-pane-named *application-frame* 'screen))
text)))

(define-superapp-command (com-greet :name t :keystroke (#\g)) ()
(setf (gadget-value (find-pane-named *application-frame* 'screen))
"text"))

最佳答案

(defun show (text)
(setf (gadget-value (slot-value *application-frame* 'text-field))
text))

在上面的函数中,您尝试从插槽中获取小工具。这不是做事的方法。请改用 FIND-PANE-NAMED。给它一个框架和 Pane 的名称。它将返回该 PANE。

(define-application-frame superapp ()
((text-field :initform nil))
(:panes
(tf1
:push-button
:label "Left"
:activate-callback (show "HI"))

同样,您现在在完全不同的上下文中使用 SHOW。现在它应该返回一个 LAMBDA,它将小工具作为参数获取。

  (app :application
:display-time nil
:height 400
:width 600)
(screen :text-field))
(:layouts
(default
(with-slots (text-field) *application-frame*
(vertically ()
(setf text-field screen)
(tabling (:grid t)
(list tf1 app)))))))

现在 :layouts 中的代码看起来不对。您不应该在那里设置插槽文本字段。实际上你根本不应该有一个插槽 TEXT-FIELD。只需在回调中使用函数 FIND-PANE-NAMED。在这里您只需定义一个布局。

关于lisp - McCLIM,如何捕捉击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com