2012-07-03 10 views
6

Mam płótno Tkinter z paskiem przewijania i niektóre elementy, które po ich kliknięciu mają zwrócić współrzędne. (Korzystanie z Python.)Python, Tkinter: Jak uzyskać współrzędne na przewijanym płótnie

Działa to dobrze z obiektami widocznymi początkowo w oknie. Kiedy jednak przewijam w dół, a elementy znajdujące się niżej na płótnie są widoczne, nie widzę ich współrzędnych obszaru roboczego po kliknięciu, ale współrzędne okna.

Nie mogę znaleźć informacji o tym, jak uzyskać bezwzględne współrzędne, więc zastanawiam się, czy ktoś tutaj wie, jak to zrobić?

Dzięki.

Odpowiedz

6

Zapoznaj się z dokumentacją widgetu kanwy here.

Aby przekonwertować z okna współrzędne na płótno współrzędnych, należy użyć metody canvasx i canvasy.

Oto przykład funkcja zwrotna, która konwertuje okna X i Y i drukuje pozycję najbliżej tej pozycji poprzez find_closest()method.

def callback(event): 
    canvas = event.widget 
    x = canvas.canvasx(event.x) 
    y = canvas.canvasy(event.y) 
    print canvas.find_closest(x, y) 
+0

Dziękuję bardzo! – Yngve

+0

Cieszę się, że pomogło! – gary

+0

Jeśli obraz jest mniejszy niż płótno, powyższa metoda daje mi bezwzględne współrzędne płótna, a nie współrzędne obrazu. Czy jest jakiś sposób, aby uzyskać mniejszy obraz, aby wypełnić płótno lub zmienić rozmiar płótna, aby wyświetlić obraz bez żadnych granic? – varagrawal