Bild mit transparenten interagierbaren Markierungen

Fragen zu Tkinter.
Antworten
Benutzeravatar
Imaginärteil
User
Beiträge: 12
Registriert: Sonntag 7. Februar 2016, 18:57

Dieses Mal habe ich nichts so besonderes. Ja, keine Ahnung, wie sich das gestalten wird, mal sehen....

Nun, es geht um einen Art Picture-Viewer, der einerseits ein Bild laden soll und diese, optionsweise mit Markierungen oder Anmerkungen überlagert, anzeigt. Diese Markierungen sollen als transparenter Rahmen über einem gewünschten Bereich des Bildes sichtbar sein.
Diese Markierungen sind rechteckig. (Ist vielleicht aber auch nicht schlecht, wenn die Möglichkeit besteht, sie kreisförmiganzeigen zu lassen.)
Legt der Benutzer nun den Mauszeiger auf einer dieser Markierungen, wird der dazu definierte Text daneben angezeigt.
(z.B. auf einem Familienfoto einen Bereich mit einem Hund, wo dann dasteht: "Das ist unser Hund Bello." - Mir fällt nichts Dööferes ein :D)

Soll erstmal einfach sein, ein einfaches Fenster, wo ein Bild mit den Überlagerungen angezeigt wird. Später kommen noch andere Schaltflächen hinzu, wahrscheinlich auch die Möglichkeit solche Markierungen zu löschen, zu bearbeiten, oder zu erstellen. Bis dahin will ich aber erstmal die Funktionsweise eines solchen Widgets (so gut wie möglich als Klasse, die alles von einem Widget erbt) gut verinnerlicht und verstanden haben ...

Welche Widgets oder Möglichkeiten könnte ich da am besten nutzen, um solch eine Wirkung zu erzielen?

Ich brauche jetzt noch keine genauen Code-Beispiele, nur Ideen und Ratschläge, welche Widgets sich anbieten und sich als mir am hilfreichsten erweisen könnten.

(Vielleicht empfiehlt ihr mir dafür auch eine ganz andere Möglichkeit Fenster darzustellen? Vielleicht gibt es ja was besseres als Tkinter, um dieses Problem anzupacken.)

Schonmal Danke für Antwort, Hilfe und Auskunft :)
Siehe x²=-1. Durch mich ist der Punkt nicht auf einem Strahl, sondern auf einer Ebene. Bewacht von Euler. Bin mit seinem Werk verwandt. Seine Identität befasst sich mit mir. Durch mich ist jetzt so einiges möglich. Hurra!
BlackJack

@Imaginärteil: Bei Tkinter klingt das nach einem `Canvas`-Widget.
Benutzeravatar
Imaginärteil
User
Beiträge: 12
Registriert: Sonntag 7. Februar 2016, 18:57

Ich habe noch nie mit Canvas gearbeitet, muss ich zugeben :D

Sollte das Element einfach mit einer gewissen Größe an eine bestimmte Position setzen, oder muss ich da wirklich von mehreren Canvas Rechtecke zeichnen lassen?
Ist das möglich, das einfach durch Koordinaten und Größe irgendwohinzusetzen und es schon gerendert zu sehen?
Oder soll ich den Canvas selbst als Bildwidget öffnen, seine Methoden so arbeiten lassen, dass Rechtecke darauf gezeichnet werden?

Ich blick da nur nicht so ganz durch, ob das Bild selbst ein Canvas sein soll oder die Rechtecke als Widgets, die darüber gezeichnet werden.
Siehe x²=-1. Durch mich ist der Punkt nicht auf einem Strahl, sondern auf einer Ebene. Bewacht von Euler. Bin mit seinem Werk verwandt. Seine Identität befasst sich mit mir. Durch mich ist jetzt so einiges möglich. Hurra!
BlackJack

@Imaginärteil: `Canvas` ist eine Zeichenfläche. Ich würde da sowohl das Bild als auch die Markierungen/Beschriftungen drauf zeichnen. Man kann da auch beliebige Widgets drauf zeichnen, die haben aber keine transparenten Hintergründe. Die Grafikelemente haben IDs und man kann denen auch Tags verpassen über die man dann auf sie zugreifen kann. Ausserdem kann man über die IDs und/oder Tags auch Rückruffunktionen für Mausklicks oder Ereignisse wie Mauszeiger betritt Element oder verlässt Element an die Elemente binden.
Benutzeravatar
Imaginärteil
User
Beiträge: 12
Registriert: Sonntag 7. Februar 2016, 18:57

Ich habe jetzt mal in einigen Refernezen rumgestöbert.

Bei der Füllung gibt es scheinbar nur vollständig transparent, oder völlig gefärbt.

Gibt es auch ein "opacity"-Argument (oder so) für ein Rechteck? (Dass es "etwas" transparent ist)
Das Problem ist jetzt, dass es nicht ausgewählt ist, wenn die Maus darüber ist, weil es völlig transparent und für den Bereich scheinbar ungültig ist.
Gibt es eine Möglichkeit, das zu beheben, dass man durchsieht und es ausgewählt ist, wenn man innerhalb des Felds ist?

Ansonsten müsste ich wesentlich komplizierter Arbeiten, mit Bildausschnitten, die von PIL zum Beispiel herausgenommen werden, mit Farbe versehen werden und durch Events platziert werden. Das wäre im Vergleich wesentlich komplizierter.
Siehe x²=-1. Durch mich ist der Punkt nicht auf einem Strahl, sondern auf einer Ebene. Bewacht von Euler. Bin mit seinem Werk verwandt. Seine Identität befasst sich mit mir. Durch mich ist jetzt so einiges möglich. Hurra!
BlackJack

@Imaginärteil: Da ist dann Tk wahrscheinlich das falsche Rahmenwerk. Oder man muss sich das wie Du beschreibst mit PIL selber basteln.
Benutzeravatar
Imaginärteil
User
Beiträge: 12
Registriert: Sonntag 7. Februar 2016, 18:57

Ja, das muss ich dann wahrscheinlich abwägen ...

Da muss ich dann wahrscheinlich um einige Zeilen mehr schreiben, aber nun ja.

Ist denn PyGame für diesen Zweck gebrauchbar und ist es ein größerer Aufwand, das zu lernen?
Mit dem Modul habe ich mich nämlich noch gar nicht befasst...
Siehe x²=-1. Durch mich ist der Punkt nicht auf einem Strahl, sondern auf einer Ebene. Bewacht von Euler. Bin mit seinem Werk verwandt. Seine Identität befasst sich mit mir. Durch mich ist jetzt so einiges möglich. Hurra!
BlackJack

@Imaginärteil: Pygame ist nur eine Zeichenfläche. Falls Du irgendwas brauchst was man von einer GUI gewohnt ist — Schaltflächen oder gar Eingabefelder — musst Du das alles selber programmieren. Und man hat nur ein Fenster. Dialoge oder gar so etwas wie ein Dateidialog ist da gar nicht dabei. Das ist für Spiele gedacht, wie der Name schon sagt. :-)

Wenn Tk nicht ausreicht ist bei mir Qt der nächste Kandidat. Allerdings ist das ein recht umfangreiches Rahmenwerk, da muss man sich auch erst einmal einarbeiten. Und man muss mit der Lizenz von Qt und der Python-Anbindung die man verwendet, einverstanden sein. Bei Qt wäre `QGraphicsView` das Widget, welches Du Dir anschauen solltest.
Benutzeravatar
Imaginärteil
User
Beiträge: 12
Registriert: Sonntag 7. Februar 2016, 18:57

Da stelle ich mich jetzt einfach mal der Herausforderung, so als Fortgeschrittenen-Prüfung...

Wird bestimmt lustig.
Das alles in eine Canvas-vererbte Klasse zu packen ist jetzt mein Ziel.

Ich denke, es ist aber auch gut sich später mal mit Qt zu befassen.
Allerdings habe ich bisher auch noch nichts von den Tkinter Dateisuche-Dialogen gesehen...
Aber da liest das Programm aus einer festen Ordnerstruktur. Ist da nicht so sinnvoll, einen Dialog dazu einzubauen.
filedialog, sehe ich gerade. Das gibt's mit Pfadauswahl auch, mal sehen, ob ich das fine...
Ich müsste eher Möglichkeiten finden, alle Ordner und Dateien aus einem Verzeichnis auflisten zu lassen. Habe den Befehl dazu
noch nicht gefunden, ist aber bestimmt nicht schwer...
Siehe x²=-1. Durch mich ist der Punkt nicht auf einem Strahl, sondern auf einer Ebene. Bewacht von Euler. Bin mit seinem Werk verwandt. Seine Identität befasst sich mit mir. Durch mich ist jetzt so einiges möglich. Hurra!
Antworten