如何在 CLIM 中将焦点设置到特定窗格?

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

启动时,

tagger-app
应将输入焦点赋予
pane2
文本字段。我该怎么做?

(cl:eval-when (:compile-toplevel :load-toplevel :execute)
  (ql:quickload :mcclim))

(defpackage :tagger
  (:use #:clim-lisp #:clim))

(in-package :tagger)

(define-application-frame tagger-app () ()

  (:panes
      (pane1 :text-field)
      (pane2 :text-field))

  (:layouts
     (default
       (vertically ()
         (labelling (:label "Pane 1") pane1)
         (labelling (:label "Pane 2") pane2)))))

(defun run-tagger-app ()
  (run-frame-top-level (make-application-frame 'tagger-app)))

(run-tagger-app)

我尝试研究 CLIM 文档,但细节太多。

common-lisp clim
1个回答
0
投票

McCLIM 维护者之一 Jackdaniel 在 #CLIM IRC 群组中这样回答

(defmethod clim:run-frame-top-level :before
  ((app tagger-app) &key)
  (clim:stream-set-input-focus (find-pane-named app 'pane1)))

注意使用

:before
,而不是
:after
,因为
run-frame-top-level
不是一个“正常”方法,立即返回结果,但它是一个始终运行的循环(如名称
run-...
所示),即当作为参数传递的框架关闭时将终止。

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