我正在使用 Tkinter 模块在 Python 上编写一个 GUI 包,并通过 FigureCanvasTkAgg 使用 matplotlib 来显示一些图形数据。我还想通过 canvas.mpl_connect 方法与数据的这种可视化表示进行交互。一切正常,但我对默认的类似箭头的光标不满意:它不允许精确点击我的数据(实际的“点击点”与箭头的尖端不匹配)并且它对用户隐藏了一些单击品脱附近的区域。所以问题是如何更改默认光标?我尝试通过 Tk 配置方法(如 master.config(cursor="tcross"))更改它,但显然 matplotlib canvas 有其自己的光标配置,因为此字符串仅更改光标在所有部分上方的外观除 MPL Canvas 外的主窗口, Canvas 上方仍显示默认箭头。
最佳答案
首先,有几个注意事项:我将深入探讨一些实现细节。我认为工具栏最近进行了重构,因此其中一些可能会随着 matplotlib 的下一版本而改变。此外,我为游标指定的值仅适用于 TkAgg
后端。一般概念与其他后端类似,但 cursord
的位置并且特定于后端的游标会有所不同。以 Qt4Agg
为例, cursord
字典在 backend_qt4
而不是 backend_qt4agg
,值是 Qt 游标:例如QtCore.Qt.ArrowCursor
.
正如我在评论中提到的,请查看 matplotlib's Cursor
widget .然而,关于如何自定义 matplotlib 使用的光标的更广泛问题有点棘手。
您不能直接更改 matplotlib 使用的光标(例如 master.config(cursor='whatever')
)的原因是默认工具栏会覆盖它(工具栏上不同工具的不同光标)。
一种选择是不添加工具栏。在这种情况下,您可以调用 parent.config(cursor='tcross')
并完成它。但是,您可能希望显示工具栏以便于平移/缩放/等。
工具栏为每个工具使用当前光标的字典:backend_tkagg.cursord
.关键是 int
代码,因此通过 matplotlib.backend_bases.cursors
引用它们更具可读性。 .默认工具是 cursors.POINTER
.
举个简单的例子(为简单起见,我使用 pyplot
界面来构建 Canvas 、图形等)
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
, 和 cursor.MOVE
.
关于python - 光标在 Tkinter 中的 matplotlib Canvas 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603215/