ich habe da jetzt nochmal etwas weiterversucht. nachdem ich etwas im netz gefunden habe, habe ich es meinen zwecken angepasst:
https://stackoverflow.com/questions/328 ... -held-down
Code: Alles auswählen
import tkinter
class App:
def __init__(self, parent):
self.root = parent
self.mouse_pressed = False
self.btn_frame = tkinter.Frame(width=100, height=100, background="bisque")
self.btn_frame.pack(padx=20, pady=20)
self.after_id = None
for row in range(10):
for column in range(5):
text = str(column) + '.' + str(row)
label = tkinter.Label(self.btn_frame, text=text, width=10, relief=tkinter.GROOVE)
label.grid(row=row, column=column, sticky=tkinter.NSEW)
label.bind("<ButtonPress-1>", self.OnMouseDown)
label.bind("<ButtonRelease-1>", self.OnMouseUp)
def do_work(self):
x = self.btn_frame.winfo_pointerx()
y = self.btn_frame.winfo_pointery()
out = self.btn_frame.winfo_containing(x, y)
print(x, y, out.cget('text'))
def OnMouseDown(self, _):
self.mouse_pressed = True
self.poll()
def OnMouseUp(self, _):
self.btn_frame.after_cancel(self.after_id)
def poll(self):
if self.mouse_pressed:
self.do_work()
self.after_id = self.btn_frame.after(100, self.poll)
root = tkinter.Tk()
app = App(root)
root.mainloop()
leider gibt es ein problem mit dem self.after_id befehl --> wenn man die maus zu schnell bewegt, kommt es zu einer ausnahme: _tkinter.TclError: unknown option "-text".
ich versuche jetzt, das self.after_id = self.btn_frame.after(100, self.poll) irgendwie durch label.bind("<Enter>") zu ersetzen, damit die ausgabe nur dann passiert,
wenn die Maus über ein neues label bewegt wird.
Das funktioniert natürlich nicht, da label.bind("<ButtonPress-1>" die funktion label.bind("<Enter>") ausschaltet.
Hat da jemand vielleicht eine bessere idee?