Tkinter 中的 matplotlib 画布上的光标

2024-04-07

我正在使用 Tkinter 模块在 Python 上编写 GUI 包,并通过使用 matplotlib图画布TkAgg显示一些图形数据。我还想通过以下方式与数据的视觉表示进行交互画布.mpl_connect方法。一切都工作得很好,但我对默认的类似箭头的光标不满意:它不允许精确单击我的数据(实际的“点击点”与箭头的尖端不匹配),而且它对用户隐藏了一些单击品脱附近的区域。那么问题来了,如何更改默认光标呢?我尝试通过 Tk 配置方法更改它(例如master.config(光标=“tcross”)),但显然 matplotlib canvas 有自己的光标配置,因为该字符串仅更改主窗口所有部分上方光标的外观(MPL 画布除外),在画布上方仍显示默认箭头。


首先,有一些注意事项:我将深入探讨一些实现细节。我认为工具栏最近进行了重构,因此其中一些内容可能会随着 matplotlib 的下一个版本而改变。此外,我为光标指定的值仅适用于TkAgg后端。其他后端的总体概念类似,但是位置cursord并且后端特定的光标会有所不同。举个例子Qt4Agg, the cursord字典在backend_qt4代替backend_qt4agg,值是 Qt 游标:例如QtCore.Qt.ArrowCursor.

正如我在评论中提到的,看看matplotlib 的Cursor widget http://matplotlib.org/examples/widgets/cursor.html。然而,如何自定义 matplotlib 使用的光标这一更广泛的问题有点棘手。

您无法直接更改 matplotlib 使用的光标的原因(例如master.config(cursor='whatever'))的问题是默认工具栏会覆盖它(工具栏上不同的工具有不同的光标)。

一种选择是不添加工具栏。在这种情况下,您只需调用parent.config(cursor='tcross')并完成它。但是,您可能希望显示工具栏以便于平移/缩放等。

工具栏对每个工具使用当前光标的字典:backend_tkagg.cursord。其关键是int代码,因此通过引用它们更具可读性matplotlib.backend_bases.cursors。默认工具是cursors.POINTER.

作为一个简单的例子(为简单起见,我使用pyplot构建画布、图形等的接口)

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

from matplotlib.backend_bases import cursors
import matplotlib.backends.backend_tkagg as tkagg

# Change the default cursor to any valid TK cursor
# To hide it, you'd use the string "none" (or possibly "no" on windows)
tkagg.cursord[cursors.POINTER] = 'coffee_mug' 

fig, ax = plt.subplots()
plt.show()

请注意,您还可以以相同的方式控制任何工具(例如缩放、平移等)的光标。您的选择是cursor.HAND, cursor.POINTER, cursor.SELECT_REGION, and cursor.MOVE.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tkinter 中的 matplotlib 画布上的光标 的相关文章

随机推荐

  • 用 C 处理 TCP 的部分返回

    我一直在读Beej 的网络编程指南 http beej us guide bgnet 获取 TCP 连接的句柄 在其中一个示例中 简单 TCP 流客户端的客户端代码如下所示 if numbytes recv sockfd buf MAXDA
  • 如何序列化和反序列化 JavaScript 对象?

    我需要序列化和反序列化 JavaScript 对象以将它们存储在数据库中 请注意 这些对象包含函数 因此我无法将它们存储为 JSON 因此无法使用 json2 js JavaScript 对象 当然是 JavaScript 的 反 序列化的
  • 在jmeter中设置整个请求url

    我有一个请求 它提供上传网址作为响应正文 uploadUrl https test com 9000 sample uploadurl I m able to extract the uploadUrl using JSON extract
  • Neo4j 中的自动增量

    有没有办法像在 Neo4j 的 MySQL 中一样设置 auto increment 例如 当我使用 GraphDatabaseService 对象创建节点时 我希望节点以 1000000000 等数字开头 非常感谢 看看这个答案 我可以在
  • 从 XSD 生成 Ruby 类

    有没有办法从 XSD 生成 Ruby 类 甚至可能是 ActiveResource 类 以便它们包含将类序列化为对初始 XSD 有效的 xml 的方法 我知道soap4r有xsd2ruby 但似乎生成的ruby类无法轻松序列化为xml 无耻
  • Android:滚动后 RecyclerView 内容混乱[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我使用 RecyclerView 来显示标记列表 并且值的每个标记都显示为 CardView 但是在RecyclerVi
  • Google 地图 v3 与 MeteorJS 加载同步问题

    我的应用程序在 MeteorJS 框架上运行并使用谷歌地图 javascript api v3 谷歌地图加载方案类似于此中解释的方案post https stackoverflow com a 16797219 942899 和官方的很相似
  • 如何创建 .chartForegroundStyleScale 的动态输入

    在 Swift Charts 中 签名为chartForegroundStyleScale为每个数据系列设置 ShapeStyle 的方法是 func chartForegroundStyleScale
  • 如何在Jenkins中设置环境变量?

    我希望能够做类似的事情 AOEU echo aoeu 并让詹金斯设置AOEU aoeu The 环境变量詹金斯的部分没有这样做 相反 它设置AOEU echo aoeu 如何让 Jenkins 评估 shell 命令并将输出分配给环境变量
  • Elasticsearch 对具有部分边缘 ngram 补全的数组字段的搜索建议

    我正在尝试根据文档中的字符串数组构建一个建议器 它类似于this one https stackoverflow com questions 20789224 elasticsearch autocomplete search on arr
  • 使用自动配置时,Windows 实际上如何检测 LAN(代理)设置

    When Windows Internet 属性 gt 连接 gt LAN 设置 gt 自动配置被设定为 自动检测设置 Windows 实际上如何确定 发现设置是什么 它是网络广播还是对注册表中某处配置的服务器的某种有针对性的查询 还是其他
  • iOS8 委托方法中的 nil 对象 - 自定义键盘

    我正在构建一个自定义键盘 我正在我的中实现以下委托方法InputViewController 但我总是得到 textInput nil void textWillChange id
  • 让AJAX调用等待php中的事件

    我不知道我的瓷砖线是否足够清晰 我的问题是 我有一个 JS 应用程序需要等待服务器上的事件 目前 它每秒通过 XMLHttpRequest 轮询连续的服务器数据 我在想的是 是否可以让调用等待 例如 PHP 中的变量发生变化 我希望我的问题
  • 为什么 jQuery.html() 能够成功接受 jQuery 对象,尽管文档说它不能?

    我只是想确切地了解它是如何工作的 因为我的代码中有一个错误可能与我的误解有关 The docs http api jquery com html html2说htmlString的参数 html htmlString 可以是htmlStri
  • 内迭代

    我有一个 ViewScoped豆与一个List
  • 无法从 docker 将 RabbitMQ 连接到我的应用程序 [重复]

    这个问题在这里已经有答案了 我目前被这个问题困扰了大约一周 确实找不到合适的解决方案 问题是 当我尝试连接到 dockerized RabbitMQ 时 它每次都会给出相同的错误 wordofthedayapp wordofthedayap
  • 在 MongoDB 中维护文档的自定义顺序/排序

    在我的网络应用程序 XY 中 我向用户展示了一个经典的数据 文档 列表 表格 虽然 MongoDB 和 Mongoose 我使用 Mongoose 提供的所有排序功能对我来说都非常清楚 但我对按日期或字母顺序排序不感兴趣 就我而言 让用户维
  • C# 中未捕获未处理的异常

    我使用以下代码来处理程序中所有未处理的异常 但问题是异常没有传播到指定的方法 STAThread static void Main AppDomain currentDomain default AppDomain currentDomai
  • 黑莓中两个不同版本(4.6、4.7 和 5.0+ 以上)的一个构建

    我想导入黑莓 5 0 及更高版本的 facebook 库 但不想导入 4 6 和 4 7 的这些库 我尝试通过以下链接使用 4 7 及更高版本的预处理器 http smartfone more blogspot in 2010 05 cod
  • Tkinter 中的 matplotlib 画布上的光标

    我正在使用 Tkinter 模块在 Python 上编写 GUI 包 并通过使用 matplotlib图画布TkAgg显示一些图形数据 我还想通过以下方式与数据的视觉表示进行交互画布 mpl connect方法 一切都工作得很好 但我对默认