首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >McCLIM,如何捕捉击键?

McCLIM,如何捕捉击键?
EN

Stack Overflow用户
提问于 2018-11-05 19:56:13
回答 1查看 136关注 0票数 1

我目前正在学习McCLIM。试图找出如何定义一个命令,这将反应击键。对于一个名为superapp的应用程序,我有一个函数

代码语言:javascript
复制
(defun show (text)
  (lambda (gadget)
    (declare (ignore gadget))
 (with-slots (text-field) *application-frame*
(setf (gadget-value text-field)
   text))))

它的屏幕上显示了一些文字。它适用于activate-callback中的窗格按钮。然而,这

代码语言:javascript
复制
(define-superapp-command (com-greet :name t :keystroke (#\g :control)) ()
 (show "Hey"))

不起作用。我知道我正确地定义了它,因为它在(frame-exit *application-frame*)中运行得很好。所以我不明白别的什么。

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

代码语言:javascript
复制
(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"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-05 21:14:39

代码语言:javascript
复制
(defun show (text)
   (setf (gadget-value (slot-value *application-frame* 'text-field))
         text))

在上面的函数中,您尝试从一个插槽中获取一个小工具。这不是办法。改为使用“查找窗格”命名。给它一个框架和窗格的名称。它会返回那个窗格。

代码语言:javascript
复制
(define-application-frame superapp ()
 ((text-field :initform nil))
 (:panes
  (tf1
   :push-button
       :label "Left"
       :activate-callback (show "HI"))

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

代码语言:javascript
复制
  (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中的代码看起来是错误的。您不应该在那里设置插槽文本字段。实际上,你根本不应该有一个插槽文本字段。只需在回调中使用查找窗格命名的函数。在这里,您只需定义一个布局。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53161305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档