Seite 1 von 1

canvas.canvas_window-widget auslesen

Verfasst: Dienstag 7. Januar 2020, 16:07
von DMD-OS
ein erneutes hallo,
ich beschäftige mich mit dem canvas.create_window.
in dem wiederum spanne ich ein frame auf, in dem einige widgets enthalten sind.
das canvas.create_window ist doch ein direktes canvas-widget, das man auslesen kann!?

Code: Alles auswählen

import tkinter as tk


class Demo(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.canvas = tk.Canvas()
        self.canvas.pack(fill="both", expand=True)
        f = tk.Frame(self.canvas)
        self.container = self.canvas.create_window(100, 100, window=f, tags='container')

        widget_text_lst = ['abc', 'def', 'ghi', 'jkl']
        for text in widget_text_lst:
            lb = tk.Label(f, text=text)
            lb.pack()
            e = tk.Entry(f, width=5)
            e.pack()
            e.bind("<Enter>", lambda event, label=lb: self.some_event_handler(label))

    def some_event_handler(self, label):
        label.configure(text="xyz")
        print(self.canvas.bbox(label))


if __name__ == '__main__':
    app = Demo()
    app.mainloop()
wie kann man denn beim drüberfahren mit der maus über eines der entries, die y-koordinate des betreffenden labels im canvas.create_window auslesen?
ps: ich hab es schon anders versucht zu lösen, was aber ziemlich kompliziert wird viewforum.php?f=18
freue mich über jede hilfe von euch.

Re: canvas.canvas_window-widget auslesen

Verfasst: Mittwoch 8. Januar 2020, 16:10
von DMD-OS
YEEESSSS. SOOOOLLLLVVVVEEDDDD.
ich habs jetzt so wies soll.
bezogen auf: viewtopic.php?f=18&t=47312 funktioniert es jetzt:

Code: Alles auswählen

def get_user_input():
    if user_input.get().isdigit():
        event = label_lst[int(user_input.get())-2]
        widget_x, widget_y = event.winfo_x(), event.winfo_y()
        canvas_x1, canvas_y1, canvas_x2, canvas_y2 = canvas.bbox(tk.ALL)
        canvas_x, canvas_y2 = canvas_x2-canvas_x1, canvas_y2-canvas_y1
        scroll_value = widget_y / canvas_y2
        canvas.yview_moveto(scroll_value)
    else:
        print("Bitte 'ne ganze Zahl")
:) :)
bei interesse poste ich auch gern alles :)