首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ltk中常见的Lisp鼠标位置

ltk中常见的Lisp鼠标位置
EN

Stack Overflow用户
提问于 2019-03-29 03:05:27
回答 2查看 208关注 0票数 5

我正在用Common Lisp做一个简单的applet,我想用鼠标移动来控制它。我使用LTK作为窗口。我找不到任何可以检索鼠标位置的函数。例如,Emacs Lisp有(鼠标像素位置)。我找到了this on rosetta code,但没有Common Lisp条目。我能做什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-29 03:21:38

来自这个答案的提示:Mouse Position Python Tkinter

看看ltk的文档:http://www.peter-herth.de/ltk/ltkdoc/node16.html

我获得了下面的示例来检索由鼠标移动引发的任何事件:

代码语言:javascript
复制
(ql:quickload "ltk")
(in-package :ltk-user)

(defun motion (event)
    (format t "~a~&" event))

(with-ltk ()
    (bind *tk* "<Motion>" #'motion))

这会打开一个小窗口,里面什么都没有。一旦你把鼠标放进去,你就会得到很多事件:

代码语言:javascript
复制
#S(EVENT
   :X 0
   :Y 85
   :KEYCODE ??
   :CHAR ??
   :WIDTH ??
   :HEIGHT ??
   :ROOT-X 700
   :ROOT-Y 433
   :MOUSE-BUTTON ??)
…

#S指示我们处理一个名为EVENT的结构,因此我们可以使用(event-x event)event-mouse-button等访问它的插槽。请参阅https://lispcookbook.github.io/cl-cookbook/data-structures.html#slot-access

另外,你可能想在freenode上加入CL社区,那里有一些游戏开发者。

票数 8
EN

Stack Overflow用户

发布于 2019-03-29 19:01:13

在大多数情况下,基于事件的方法可能更合适,但您也可以直接查询当前位置:

代码语言:javascript
复制
(defpackage :so (:use :cl :ltk))
(in-package :so)

(with-ltk ()
  (loop
    (print 
      (multiple-value-list
        (screen-mouse)))
    (sleep 0.5)))

这将启动图形顶层并每隔500ms打印一次当前屏幕坐标,直到您退出顶层窗口。screen-mouse函数接受一个可选的w参数(一个窗口)。

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

https://stackoverflow.com/questions/55405140

复制
相关文章

相似问题

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