是否可以使用 Python Tkinter 制作自定义鼠标光标? (使用 matplotlib 和 TkAgg 后端)

发布于 2024-08-13 22:05:25 字数 1031 浏览 4 评论 0原文

这很可能只是一个一般的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撩动你心 2024-08-20 22:05:25

像这样的东西适用于 unix X11 XBM 文件:

import Tkinter
t = Tkinter.Tk()
t.configure(cursor=('@/usr/include/X11/bitmaps/star', '/usr/include/X11/bitmaps/starMask', 'black', 'white'))
t.mainloop()

对于 Mac,从“Tk_GetCursorFromData”的手册页:

Tk 的 Macintosh 版本支持所有 X 光标

还将接受任何标准 Mac 光标
包括
ibeam、十字准线、手表、加号和箭头。此外,Tk
将要
加载 crsr(颜色)类型的 Macintosh 光标资源

CURS(黑白)按资源名称。

应用程序及其所有开放动态库资源
文件
将搜索指定的光标。如果有
冲突
颜色光标将始终优先加载
黑色和
白色光标。

Something like this works with unix X11 XBM files:

import Tkinter
t = Tkinter.Tk()
t.configure(cursor=('@/usr/include/X11/bitmaps/star', '/usr/include/X11/bitmaps/starMask', 'black', 'white'))
t.mainloop()

As for the Macs, from the man page for "Tk_GetCursorFromData":

The Macintosh version of Tk supports all of the X cursors
and
will also accept any of the standard Mac cursors
including
ibeam, crosshair, watch, plus, and arrow. In addition, Tk
will
load Macintosh cursor resources of the types crsr (color)
and
CURS (black and white) by the name of the of the resource.
The
application and all its open dynamic library's resource
files
will be searched for the named cursor. If there are
conflicts
color cursors will always be loaded in preference to
black and
white cursors.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文