3

这很可能只是一个一般的 Python Tkinter 问题,不一定是 matplotlib 问题。

因此,我正在使用 Matplotlib“TkAgg”后端(使用 TkInter 将 Agg 渲染到 Tk 画布)在 matplotlib 之上开发一套相当大的绘图功能。我正在使用 matplotlib 开箱即用提供的一些默认缩放功能......特别是默认 matplotlib 工具栏上的“缩放到框”按钮。我通过继承现有的“matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg”类来创建自己的工具栏。

几乎,这里的问题是我讨厌“缩放到框”使用的默认图标(Tkinter“tcross”)。我已经弄清楚如何使用不同的 Tkinter 内置光标(例如,这会将光标更改为“加号”而不是“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 上可用,因此不希望使用特定于平台的解决方案。

4

1 回答 1

3

像这样的东西适用于 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(彩色)和 CURS(黑白)类型的 Macintosh 光标资源。
将在应用程序及其所有打开的动态库的资源文件中搜索命名游标。如果存在冲突,将始终优先加载彩色光标,而不是黑白光标。

于 2009-12-10T16:53:34.897 回答