Можно ли создать собственный курсор мыши с помощью Python Tkinter?(Использование matplotlib с бэкэндом TkAgg)

StackOverflow https://stackoverflow.com/questions/1877360

Вопрос

Вполне вероятно, что это всего лишь общий вопрос о Python Tkinter, а не обязательно вопрос о matplotlib.

Итак, я занимаюсь разработкой довольно большого набора функций построения графиков поверх matplotlib с использованием бэкэнда Matplotlib «TkAgg» (рендеринг Agg на холст Tk с использованием TkInter).Я использую некоторые функции масштабирования по умолчанию, предоставляемые 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, поэтому решение для конкретной платформы нежелательно.

Это было полезно?

Решение

Что-то вроде этого работает с файлами 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, Crosshair, Watch, Plus и Arrow.Кроме того, TK загрузит ресурсы курсора Macintosh типов CRSR (цвет) и Curs (черно -белый) по имени ресурса.
Приложение и все файлы ресурсов от открытой динамической библиотеки будут искать именованного курсора.Если есть конфликты, цветные курсоры всегда будут загружены в предпочтениях черно -белым курсорам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top