代码之家  ›  专栏  ›  技术社区  ›  Brent Writes Code

是否可以使用python tkinter创建自定义鼠标光标?(在tkagg后端使用matplotlib)

  •  3
  • Brent Writes Code  · 技术社区  · 14 年前

    这可能只是一个普通的python-tkinter问题,不一定是matplotlib问题。

    因此,我正在开发一套相当大的绘图功能,利用matplotlib“tk agg”后端(agg使用tkinter渲染到tk画布)。我正在使用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上可用,因此不需要特定于平台的解决方案。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Mark    14 年前

    类似这样的文件适用于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()
    

    至于macs,从“tk_getCursorFromData”的手册页:

    Macintosh版本的tk支持所有的x光标 和 还将接受任何标准的Mac光标 包括 ibeam、十字线、手表、加号和箭头。另外,tk 将 加载crsr(color)类型的Macintosh光标资源 和 以资源的名称命名的光标(黑白)。
    这个 应用程序及其所有打开的动态库资源 文件夹 将搜索指定的光标。如果有的话 冲突 颜色光标将始终优先加载到 黑色和 白色游标。