Sry, dass ich mich so lang nicht gemeldet hab, aber ich hatte nicht allzuviel Zeit und in dieser musste ich mich schließlich auch durch diverse Tkinter-Dokumentationen kämpfen;) .
Trotz allem sind noch ein paar Fragen offengeblieben:
Dass die Achsen den Graphen überlagern ist klar. Da sie immer wieder neu gezeichnet werden, haben sie eine höhere ID als der Graph und werden zu oberst gezeichnet. Mittels tag_raise() bzw. tag_lower() kannst du das wie gewünscht einstellen.
Der Graph (ja, ein Streckenzug

) sollte ja nicht nur nicht die Achsen überlagern, sondern auch ab diesem Punkt abgeschnitten sein, sprich, nach dem Überschreiten nicht mehr sichtbar sein.
Ich hab mir jetzt damit beholfen, zusätzlich farbneutrale Rechtecke einzufügen, durch die dann der Graph nicht mehr durchgeht. Wäre solch eine Lösung "unschön", wenn Ja, wie würde man es "richtig" machen?
Und das mit rechts oben statt links oben bekommst du auch allein noch hin ...
Die einzige Möglichkeit, die mir eingefallen ist, ist die Y-Scrollbar nach ganz unten zu setzen.
Laut Dokumentation geschieht dies mit der Methode set(lo, hi).
Leider passiert überhaupt nichts wenn ich setze set(0.0, 1.0).
Lasse ich mir mittels "get" die Werte anzeigen, erscheint je nach Y-Länge "(0.x, 1.0)".
Setze ich ein solches Wertepaar mit set, funktioniert das ganze allerdings wieder ohne Probleme, jedenfalls so lang bis man die Y-Länge wieder ändert.
Ich versteh nicht, warum das ganze nicht mit (0.0, 1.0) funktioniert...
Weiteres Problem:
Da für kleine Y-Gesamtlängen des Graphen die Beschriftung beim Vergrößern des Fensters ins Negative geht, habe ich eine vom Graphen abhängige Maximalgröße des Root-Fensters festgelegt (geht dies eventuell auch über Framegröße? ). Wenn jedoch das Fenster schon größer als der Maximalbereich ist, wird es nicht automatisch verkleinert. Kann man dies irgendwie errreichen?
Zum Skalieren:
Ich hatte mir überlegt, dass man einfach nur den Graphen und die Beschriftung der Achsen mit angepassten Werten neuzeichnen müsste, wenn das Scrollrad bewegt wird. In der Dokumentation kann ich leider kein passendes Event finden. Gibt es wirklich keins?
Danke für die Code-Snippets, das erleichtert die Sache ganz immens.
Angemeldet dafür?!