[gelöst] Frame-Icon Problem

Plattformunabhängige GUIs mit wxWidgets.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mathi hat geschrieben:Ich verwende den pyinstaller. Wie ist das einbetten möglich?
Mit der Kommandozeilenoption ``--icon``, wie im Manual beschrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Leonidas hat geschrieben: Mit der Kommandozeilenoption ``--icon``, wie im Manual beschrieben.
Ich kenne die Option, damit habe ich der .exe ein Icon zugeordnet, dass man damit auch das Icon für den Frame nutzen kann war mir neu.... gleich mal ausprobiert und ...es funktioniert nicht

edit: die Option ist allein für das Einbinden eines Icons für die Datei, nicht aber für den Frame möglich. Das merkt man aber erst, wenn man die *.ico im Ordner löscht.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Ich bin ja immernoch der Meinung es liegt am Auflösungsverhältnis....oder?
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Also ich habe das Programm mal auf einem anderen Rechner mit 24" Monitor (aber Win XP) mit der gleichen Auflösung (16:9) laufen lassen, da hat es auch nicht funktioniert.... also liegt es definitiv an der Auflösung und nicht an Vista selbst !!!

Was ich aber nicht verstehe: wenn ich das Icon als Datei einbinde funktioniert es ja trotz der krummen Auflösung...?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mathi hat geschrieben:Was ich aber nicht verstehe: wenn ich das Icon als Datei einbinde funktioniert es ja trotz der krummen Auflösung...?
Hallo mathi!

Ein Icon (.ico) ist ein spezielles Dateiformat, welches mehrere Bilder in verschiedenen Größen enthalten kann. Ich kann mir vorstellen, dass beim Öffnen des Icons das passende Bild aus der Icon-Datei genommen wird. Ich kann mir auch vorstellen, dass das Bild beim Öffnen mit ``wx.Icon()`` irgendwie angepasst wird, damit es korrekt angezeigt werden kann. Was genau gemacht wird, ist sicherlich im Quellcode von wxPython ersichtlich. Aber mir fehlt die Motivation, diesen jetzt durchzusehen.

Diese Informationen oder Aufbereitungsschritte gehen natürlich verloren, wenn das Bild als "Image" oder "Bitmap" verarbeitet wird. Das Einfachste ist immer noch, eine Datei mit ``wx.Icon()`` zu öffnen und direkt zu verwenden. Dann muss man sich keine Gedanken mehr machen.

Nimm cx_freeze oder py2exe und liefere die zusätzlichen Dateien mit einem Setupprogramm aus. Das ist einfach und funktioniert (normalerweise). :-) --> http://www.python-forum.de/post-35092.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

gerold hat geschrieben:Ich kann mir auch vorstellen, dass das Bild beim Öffnen mit ``wx.Icon()`` irgendwie angepasst wird, damit es korrekt angezeigt werden kann. Was genau gemacht wird, ist sicherlich im Quellcode von wxPython ersichtlich. Aber mir fehlt die Motivation, diesen jetzt durchzusehen.
ich hätte die Motivation, nur leider weiß ich nicht, wie ich die Stellen finde....
habe über die Suche nach Dateinamen "icon" nichts gefunden, also müßte die Funktion wx.Icon() wo anders stehen, nur wo???

Gruß Mathi
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

noch eine andere Frage:
img2py kann mit der Option -1 eine Funktion erstellen, um das Icon als wxIcon aufzurufen:

Code: Alles auswählen

from wx.lib.embeddedimage import PyEmbeddedImage

icon = PyEmbeddedImage(
    "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAEGUlE"
    "QVRIie1WS0srSxCu6emeR2I0JiSKaBa+FSQouAnE4MJf4EIQf4Nu/DWu/AsuxIXg+4EgKi6S"
    "nWJioiSZPCaJwzzSfRfNzQk65njlcs65cL/FMExX9Vf1dVX1APwnIAjCL3T7Nn4137+C7wTd"
    "2UcQhHaDnxr/eB8eHl5bW8vlcoIgEEIsy6KUfvRhjImiGIlEtra2np+fAWBpaWl2dlbTNMYY"
    "ACCECCG2bVNKRVHEGFuWBQCUUowxd8Tz8/Nzc3MrKyulUimTyUSjUcdxXMlkWdY0bXd3N5vN"
    "MsYWFhbi8XgwGOTBSZJ0fn4ejUYlSUomkwMDA4FAgC/Jsvz6+rq3t4ebzWYkEqnVaoQQVVV1"
    "Xbdt+7PMxsbGCoUCF+fl5WVgYCCfz1NKGWOKovT29jLGGo1GJBLRNA1j3Gw2GWOEkMHBQQBA"
    "AKAoCteQEIIQ6iC9JEmcmDGGEEII8e+CIHAZMcaMMUmSJEniq3xJFEUAwAihnZ2diYkJALi5"
    "uVldXQ2Hw65nLopiPp8fHR19eHgAgPHxcV3Xh4aGGGOU0re3t9PT03g8bhhGsVjEGCcSCUVR"
    "uP7VahUAMKV0eXlZ13VCSDAYnJ6eFkXxHRljjAfY3d1dLBb5x83NTVVVDcOglHK5jo+P/X6/"
    "YRhTU1PX19eTk5N8K+749vaGAcAwjEajIctyV1cXADSbTa4ML7P29xYTAFiWZdt2ywYAvF6v"
    "YRiGYWCMVVVtbdVy/CE6AGCM27N5x+RaNe90hr+7sH2rFjDXVFEUQkh74P+I9YvACKGTk5NA"
    "IEAIeXx8vLi46OnpeRdvJpPxeDwejwdjvLGxcXBw8E0yxtj09LSqqjx9RVF0XW+3IIRUKpX+"
    "/n7Lsnp6ejKZzPczo5T6fD7TNAGAUsqPvd2Ct4tpmqZpejyeDnvxzmu1oIsBxvju7s5xHF3X"
    "n56eeAO2wKdAKpXSNE3TtMPDw8+6HgDu7+8xxoIgFAqFcrnsklk6nXYc5+zsjAd1dHTUqleO"
    "crkci8XC4XC1Wp2cnHSdnBwzMzN8NRQK1et1F7LLy8vLy8sO4gDA9vZ2JBIBAMbYu1DawRhz"
    "HIcPFFezTzVph8/nE0Xxi3Xf4XpDnZc56vW6IAgfx9jXaThwIpFYX1/P5XKuiQuCUCqVGGOl"
    "UknXddM0CSGdd+xE1tfXhzFeXFy0LMs1NITQ/v7++Pi43++/vb3tUI0/1RlTSkdGRqrV6mdk"
    "siwPDQ3xHojFYh0KhLcNv9VcY8L82uSjCNwGICHE6/X6fD6MsSzL/ORck6jVapIkZbNZv9/v"
    "qjaybTuVSpmmyWdH+9O2bcdxTNOsVCrJZLJarV5dXYVCoY9MXBKEkKZpyWQynU4Hg0GX3Fsh"
    "fPZ39if+v/6emL7E+ifK9T9+O/4Ca6olvzq05dsAAAAASUVORK5CYII=")
geticonData = icon.GetData
geticonImage = icon.GetImage
geticonBitmap = icon.GetBitmap
geticonIcon = icon.GetIcon

leider funktioniert dann aber ein

Code: Alles auswählen

 self.SetIcon(geticonIcon)
nicht, die Fehlermeldung lautet
TypeError: in method 'TopLevelWindow_SetIcon', expected argument 2 of type 'wxIcon const &'
warum das denn, ich dachte ich habe mit

Code: Alles auswählen

geticonIcon = icon.GetIcon
ein IconStream erzeugt ????

edit: dieses Problem hat sich erledigt, mit

Code: Alles auswählen

geticonIcon = icon.GetIcon()
, bringt aber auch nicht die erwünschte Wirkung
Zuletzt geändert von mathi am Montag 23. Februar 2009, 14:15, insgesamt 2-mal geändert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Der Quellcode steht in C++-Dateien. Die findest Du nur im Source-Code von wxPython, der ja nicht in den Binaries enthalten ist. Dort befinden sich aber mehrere Dateien mit Icon im Namen, z.B. "wxPython-src-2.8.9.2\src\generic\icon.cpp".
MfG
HWK
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Problem gelöst:

man nehme ein icon.ICO erstelle einen Stream mittels img2py -i icon.ico icon.py

und dann obiges

Code: Alles auswählen

geticonIcon = icon.GetIcon
dann bekommt man das Icon auch für "krumme" Auflösungen :-)
Antworten