canvas - 如何让 canvas% 对象响应鼠标悬停?

标签 canvas scheme racket mouseover

此刻,我有一个如下所示的窗口:

enter image description here

每个绿色圆盘代表一个数字。我怎样才能做到当您将鼠标移到磁盘上时,会出现工具提示或其他内容并显示数字?

当然,这只是一个简单的说明。我们的目标是了解如何在不为每种情况编写大量新代码的情况下实现这一点。

目前,我正在 Canvas 上绘制一个大的“pict”图像,这似乎是错误的方法。以其他方式重写它并没有什么大不了的。我只需要知道正确的方法是什么:哪个工具,哪个库,您打算如何将这些东西放在一起来实现鼠标悬停。

我一直在搜索 Racket 文档,但到目前为止还没有找到这个问题的任何明确答案。

最佳答案

您需要使用新的 on-event 扩展 canvas% 类方法。 on-event 方法接受 mouse-event%对象,其中包含鼠标相对于目标窗口的 xy 坐标。

从那里,您可以将其与您使用的任何数据结构进行比较,以计算在 Canvas 上绘制圆圈的位置。

所以像这样的东西应该有效:

(define clicky-canvas%
  (class canvas%
    (define/override (on-event e)
      (define window-x (send e get-x))
      (define window-y (send e get-y))
      (when (eq? (send e get-event-type) 'left-down)
        .... your code here ....)))

现在您可以将 clicky-canvas% 对象插入到之前插入 canvas% 对象的窗口中。

关于canvas - 如何让 canvas% 对象响应鼠标悬停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52764269/

相关文章:

计划 - 二十一点计划 (SICP)/学习编程

algorithm - 如何计算此斐波那契算法的效率?

multithreading - Racket 支持多线程吗?

javascript - 如何使用jsPDF打印页数相同的 Canvas 上的PDF?

javascript - 使用 springy.js 加载多个图形时 Canvas 闪烁

process - 如何在 Guile 中的两个进程之间创建管道?

http - Racket 通过 http-client 或 post-impure-port 上传带有参数的 zip 文件

javascript - 无法使用 Canvas 以特定度数围绕圆圈旋转箭头

javascript - 有什么方法可以在 javascript 中将径向渐变变成椭圆形?

list - 附加列表以显示在 Racket 的文本字段中