是否可以使用 Python Tkinter 制作自定义鼠标光标? (使用 matplotlib 和 TkAgg 后端)
这很可能只是一个一般的 Python Tkinter 问题,不一定是 matplotlib 问题。
因此,我正在使用 Matplotlib“TkAgg”后端(使用 TkInter 将 Agg 渲染到 Tk 画布)在 matplotlib 之上开发一套相当大的绘图功能。我正在使用 matplotlib 开箱即用提供的一些默认缩放功能...特别是默认 matplotlib 工具栏上的“缩放到框”按钮。我通过对现有的“matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg”类进行子类化来创建自己的工具栏。
基本上,这里的问题是我讨厌“缩放到框”使用的默认图标(Tkinter“tcross”)。我已经弄清楚如何使用不同的 Tkinter 内置光标(例如,这将光标更改为“plus”而不是“tcross”):
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.backend_bases
import matplotlib.backends.backend_tk_agg
matplotlib.backends.backend_tkagg.cursord[matplotlib.backend_bases.cursors.SELECT_REGION] = "plus"
一般来说,我知道将当前鼠标光标更改为内置光标之一- 在工具栏类的 Tkinter 中,我可以直接调用:
self.window.configure(cursor="cursor_name")
所以我真正非常喜欢的是能够在用户处于“缩放模式”时使用放大镜图标。我已经有了 .ppm 的我想使用的放大镜图标和所有内容,但我一生都无法弄清楚如何使用我的放大镜作为鼠标光标图标。是否可以在 Python Tkinter 中使用自定义图像作为鼠标光标?帮助!
平台说明:这需要在 Mac OS X 10.5+、RedHat Enterprise Linux 5 以及可能的 Solaris 10 上运行,因此不需要特定于平台的解决方案。
It's likely that this is just a general Python Tkinter question, not necessarily a matplotlib one.
So I'm in the midst of developing a rather large suite of plotting functionality on top of matplotlib using the Matplotlib "TkAgg" backend (Agg rendering to a Tk canvas using TkInter). I'm using some of the default zooming functionality provided by matplotlib out of the box...specifically the "Zoom to box" button on the default matplotlib toolbar. I am creating my own toolbar by subclassing the existing "matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg" class.
Pretty much, the issue here is that I hate the default icon that "Zoom to box" uses (the Tkinter "tcross"). I've figured out how to use a different Tkinter built-in cursor (e.g. this changes the cursor to "plus" instead of "tcross"):
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.backend_bases
import matplotlib.backends.backend_tk_agg
matplotlib.backends.backend_tkagg.cursord[matplotlib.backend_bases.cursors.SELECT_REGION] = "plus"
And in general, I know that to change the current mouse cursor to one of the built-in Tkinter ones from the toolbar class, I can just call:
self.window.configure(cursor="cursor_name")
So what I would really, really like is to be able to use a magnifying glass icon for when the user is in "zoom mode". I already have a .ppm of the magnifying glass icon I'd like to use and everything, but I can't figure out for the life of me how to use my magnifying glass as the mouse cursor icon. Is it possible to use a custom image as a mouse cursor in Python Tkinter? Help!
Platform note: This needs to be workable on Mac OS X 10.5+, RedHat Enterprise Linux 5, and possibly Solaris 10, so a platform-specific solution is undesirable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
像这样的东西适用于 unix X11 XBM 文件:
对于 Mac,从“Tk_GetCursorFromData”的手册页:
Something like this works with unix X11 XBM files:
As for the Macs, from the man page for "Tk_GetCursorFromData":