Hallo LP640
Hier eine Lösung basierend auf der Idee von numerix. Funktioniert aber nur in einem Canvas-Widget. Vielleich könnte es auch mit xturtle funktionieren. Leider arbeite ich nicht mit 'xturtle':
Code: Alles auswählen
# wuf_ref: canvas_cursor_01.py
import Tkinter as tk
def canvas_enter(event):
app_win.cursor_store = canvas['cursor']
canvas.config(cursor="@nil_cursor black")
app_win.cur_xpos = event.x
app_win.cur_ypos = event.y
canvas.itemconfigure('my_cursor', image=my_cursor_image)
canvas.tag_raise('my_cursor')
canvas.coords('my_cursor', app_win.cur_xpos, app_win.cur_ypos)
def canvas_leave(event):
canvas.itemconfigure('my_cursor', image='')
canvas.config(cursor=app_win.cursor_store)
def move_my_cursor(event):
app_win.cur_xpos = event.x
app_win.cur_ypos = event.y
canvas.tag_raise('my_cursor')
canvas.coords('my_cursor', app_win.cur_xpos, app_win.cur_ypos)
app_win = tk.Tk()
#~~ Daten fuer mein Cursor-Symbol (Base64-Format)
MY_CANVAS_CURSOR = \
'''
R0lGODlhNQA1AMYoAAAAAAAEAAgECAgICAgMCBAMEBAQEBAUEBgUGBgYGBgc
GCAcICAgICAkICkkKSkoKSksKTEsMTEwMTE0MTk0OTk4OTk8OUE8QUFAQUFE
QUpESkpISkpMSkpQSlJMUlJQUlJVUlpVWlpZWvAgAFpdWmJdYmJhYmJlYvAw
AGplamppamptanNtc3Nxc3N1c3t1e3t5e3t9e4N9g4OBg4OFg4uFi4uJi4uN
i5SNlJyRe5SRlJSVlJyVnJyZnJydnPCQAKSdpKShpKSlpKylrKyqrKyurLSu
tLSytLS2tL22vfDAAMW6nM26i726ve7CIL2+vcW+xcXCxebGWsXGxf/OAPbK
Me7KSv/OCP/KKf/SAM3Gzf/SGM3Kzf/OMd7OlP/WGM3OzdXO1f/WOf/WStXS
1fbaYtXW1d7W3v/eat7a3t7e3v/ie+be5ubi5v/qi+7m7u7q7vbuze7u7v/y
vfby9v/y3vb29v/2///6//////AwAPAwAPAwAPAwAPAwAPAwACH+FUNyZWF0
ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgB/ACwAAAAANQA1AAAH/oB/goOEhYaH
iIYjhIuLiY+QkYySlJWGKH8omJiOlp6PmIKhn6SHmpqZmaOlpaGbf3OssqKq
mG5UYoNKs5avqX9fVF5/SsW8va4oZVlMxMeSHkg2LWhUVFtjY1RXus+PHEl3
dGtUTlJYVV1WS86sNzIyQU1NR0c3IBUnQoInTTZ0dsRQyTHjSaFdpEi0aJMn
jx06cN6oSUMmigkACULokHGhCZ06ce6oEPSj3ScSM+TkwXNHDpw2bMyQ4aLl
SRMWA0h8mAAAwL+HTVzI8tGBYR5xEdlQDKMlSpMkRohYeHBAQE8AEmw0ITGy
FAkcK1u+ZHNmphYo9IwMCdKjxNW3/j0bsCIBxCFEiUunOE1ShEgQIDt02GgA
t+cAViuIiIUpk6bNI0aEsOVxw8YMGRYKAxBKykePuxPJhNH7tO/fwDZqyIDR
okJhA6xAvFTTuGZayT0oW5bxwsUKFRI0c0h4JjQY0nz9AhZcIwZrFidMiEig
GQApFrUfR55c+bKLFipSkBDxYUN1ABA8kYgyeq/p5amdt2CRQnoIDxseWK3u
ycKUx0XgtkN3MnwXXgnkeaABBhUMcB4AGFRyAwtNIGGaD6jRIB909nGwAQYX
TLAAAAEAYFWJbx1GyQwzBMjdbgaKl2AGDFIAAWEP9mTDijIA0YMOOMT3XHQi
hOAhiBNI/vCAAwGUeKKJJL5VCQAkDGhZDDGO94EHNFZg4wMMKIBijgBYQAkA
FNSgIWsrEGnkhyEq6YACCDQJpZNRWrXfA2cO0Bt4Mm7Z5ZcMLHBAAWSaGIBV
fEoSF4dFHhnnkgokUICDeGYK5QADGOBgo5FcxcAHH3DQ5QQQgKnAAQaMeV6T
AxBgwAEIAAAqJClGYIEFST7QAJ0EOPjksHkOUIABCCSwAHW3PqJZrJzamSgA
nBpgQAIJMNDAiGZKQkB1mhKLpwACFFAAAggssIADD0RAXSXmTVudAMYiqywD
7EogQa2WzJvnv04GEOusCSig7QMQUECBBZz2K+9VTRZAAK0L/ijQgAMRQDBB
BRc8AEAFloAAl7h3Utvptdky8MAD+lZgAQYZ1EqDJ/IKLOsBBR8MgQQbW5BB
Bq7J5ckHhRFL77HJLoBvuxJQwDEGG0Tt4AykfHtetSgzoDLLElRQAQZQb/AB
dRmwApeTAhBAALoKrItxBApfcIEGGnjgQQgMAKCALCSMXG/SS0fQ9NMabODB
B3hTe8MsHFyVNsEGN4Awzy7DvAEHH4CQ+ABU8yLCVQUcoIDFDUAA9wQWzJ0B
B3eDoIGDsHnzh4MAFLB1y1+HTaoIHjgQl+yDZNCTAAlE0LPlmHtQgQKGAW8I
BlcZoIADki9Za0+xO39ICxMcoJnQCdqHL/745HsSCAA7
'''
#~~ Daten fuer einen TK Null-Cursor (xbm-Format)
nil_cursor_data = """
#define t_cur_width 1
#define t_cur_height 1
#define t_cur_x_hot 0
#define t_cur_y_hot 0
static unsigned char t_cursor[] = { 0x00};
"""
#~~ Erzeugt eine Datei mit den TK Null-Cursor-Daten
f=open("nil_cursor", "w")
f.write(nil_cursor_data)
f.close()
#~~ Mein eigener Canvas-Cursor (Quelle = Base64-Format)
my_cursor_image = tk.PhotoImage(data=MY_CANVAS_CURSOR)
#~~ Mein eigener Canvas-Cursor (Quelle = .gif-Datei)
# my_cursor_image = tk.PhotoImage(file='my_canvas_cursor.gif')
#~~ Global einsetzbare Variablen
app_win.cursor_store = ''
app_win.cur_xpos = 0
app_win.cur_ypos = 0
#~~ Meine Canvas-Plattform
canvas = tk.Canvas(app_win, bg='red', width=300, height=200)
canvas.pack()
canvas.bind("<Enter>", canvas_enter)
canvas.bind("<Leave>", canvas_leave)
canvas.bind("<Motion>", move_my_cursor)
#~~ Platzhalter fuer mein eigener Canvas-Cursor
canvas.create_image(0, 0, image=None, tag='my_cursor')
#~~ Ein stationaeres Canvas Grafik-Objekt
canvas.create_rectangle(100, 50, 200, 150, fill='yellow', tag='fix_object')
app_win.mainloop()
Gruss wuf