Wie setzt man das Window Icon korrekt?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
lunar

@rhersel: In Qt gibt man normalerweise einfach nur den Namen des Symbols an (siehe "QIcon.fromTheme()"), und überlässt Qt den Rest, sprich suchen, laden und skalieren. Gdk ist dafür gar nicht zuständig, denn wie gesagt kümmert sich Gdk nur um die direkte Fensterverwaltung. In Gtk gibt es dafür http://developer.gnome.org/gtk3/stable/ ... kIconTheme, und ich bin mir ziemlich sicher, dass das die Klasse ist, die Du eigentlich suchst. GdkPixbuf ist – wie der Name schon sagt – einfach nur ein Haufen Pixel, kein Symbol mit verschiedenen Größen und erst recht keine Vektorgrafik. SVG ist so komplex, dass es dafür mit rsvg eine eigene Bibliothek gibt. GtkIconTheme implementiert dagegen den Standard für Symbole und Symbolthemen unter Linux, so dass Unity und Deine Anwendung zumindest schon mal an der selben Stelle nach einem Symbol für Dein Programm suchen.

Allerdings wird das wohl nicht reichen. Ich habe bisher nicht daran gedacht, doch ich glaube, dass Gnome Shell und Unity ihre Symbole aus der Desktop-Datei der Anwendung zu laden versuchen, und das Fenstersymbol nur als letzten Ausweg verwenden. Damit Deine Anwendung sich in Unity integriert, musst Du also eine Desktop-Datei für Deine Anwendung installieren.

Verschiedene Pixelgrafiken für verschiedene Auflösungen kann man sich im Übrigen nicht sparen, wenn hochwertige Symbole gewünscht sind, da man die unterschiedlichen Anforderungen an Symbole verschiedener Größen nicht mit einer Grafik abdecken kann. Große Symbole müssen detailreich sein, um nicht langweilig zu sein, kleine Symbole dagegen dürfen nicht viele Details haben, da man bei geringen Symbolgrößen die wesentliche optische Eigenschaft des Symbols nicht durch Details verdecken darf. Detailarme Vektorgrafiken wirken in hohen Auflösungen langweilig, detailreiche Vektorgrafiken sind in niedrigen Auflösungen verwaschen, und überladen. Beim Entwurf eines Symbols geht man mithin von der detailreichen, großen Symbolgrafik aus, und erzeugt daraus manuell (und nicht automatisch mit einem SVG-Renderer) kleinere Pixelgrafiken, wobei man manuell unerwünschte Details entfernt. Deswegen liegen in "/usr/share/icons/" viele Pixelgrafiken, die allesamt subtile Unterschiede zur entsprechenden skalierbaren Vektorgrafik in "/usr/share/icons/*/scalable/" aufweisen.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Danke für die einleuchtende Erklärung, sowohl bezüglich IconTheme als auch zu SVG.
Jetzt brauche ich nur noch ein Python Code Beispiel wie man es tatsächlich macht; ich meine das IconTheme dem Window zuweisen.

...

In der Zwischenzeit habe ich mir die ganze Spezifikation für IconThemes durchgelesen. Das ist mir zu aufwändig; ich beschränke mich auf ein 48er Icon und weise es einfach mit window.set_icon_new_from_file() zu; fertig, aus.
Zuletzt geändert von rhersel am Freitag 9. März 2012, 10:49, insgesamt 1-mal geändert.
lunar

@rhersel: Falls Du dieses Beispiel jetzt von mir erwartest, so muss ich Dich enttäuschen. Ich kenne Gtk zu wenig, als dass ich Dir ein Beispiel aus dem Ärmel schütteln könnte. Was ich bisher getan habe, war im Wesentlichen lediglich, Dir die Dokumentation vorzulesen.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Ist völlig ok. Vielen Dank für die Hilfe.

In der Zwischenzeit habe ich mir die ganze Spezifikation für IconThemes durchgelesen. Das ist mir zu aufwändig; ich beschränke mich auf ein 48er Icon und weise es einfach mit window.set_icon_new_from_file() zu; fertig, aus.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Hallo, irgend eine Lösung inzwischen gefunden? Ich versuche auch schon seit einem halben Jahr bald eine Lösung zu finden für das Problem, dass meine Programm Icons immer nur in schlechter Qualität dargestellt werden, selbst wenn ich eine SVG Bilddatei nehme.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Ich habe hier einen Kommentar gefunden, in dem steht, dass unter Unity und GTK3 die Icons nur in guter Qualität dargestellt werden wenn diese in der Starter Datei (.desktop) auch angegeben sind:
http://stackoverflow.com/questions/8796 ... -in-ubuntu

Ob das so stimmt kann ich aber nicht beurteilen und aus anderen Projekten werde ich auch nicht wirklich schlau:
https://git.launchpad.net/zim/tree/zim/ ... cations.py

Ich würde mich freuen wenn hier jemand noch einen ein kleines Python Projekt kennt bei dem das gut umgesetzt wurde. Danke schon mal!
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Ist das nicht einfach so, dass eine Nummer größer genommen wird und dann ist etwas vorhanden, was herunterskaliert werden kann?

Gut, ich habe von GTK keine Ahnung, nur bei Tkinter hatte ich 32 x 32 genommen, was mit 16 x 16 in der Titelleiste angezeigt wird, weil ich es von Favicons für Webseiten nicht anders kannte.
Antworten