Icons nur auf Entwicklungsmaschine angezeigt.

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Hi,

ich verwende Python 3 mit dem aktuellsten PyQt.
Ich habe mit setWindowIcon() an mehreren Stellen im Code Icons für meine GUI definiert.
Weiters zeige ich mit QMovie ein gif an.

Leider funzt das nur auf meinem Rechner. Sobald man das Programm auf einem anderen Rechner ausführt sieht man weder Icon noch gif.
Ich habe bereits absolute und relative Pfade verwendet. Die Rechner haben Python nicht installed sondern greifen auf eine Installation im Netzwerk zu.

Ideen dazu ?

Danke im Vorraus !
lunar

@patmaster: Offensichtlich werden die Symbole nicht gefunden. Warum, kann man Dir ohne Quelltext und Informationen über die Installation nicht sagen.
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Der komplette Quelltext wäre wohl etwas viel deswegen hier die Sachen wo ich referenziere, wobei grabber.ico und load.gif im selben Verzeichnis wie die pys liegen:

Code: Alles auswählen

self.setWindowIcon(QtGui.QIcon('grabber.ico'))

Code: Alles auswählen

self.movie = QMovie("load.gif", QByteArray(), self)
Falls wirklich der komplette Code benötigt http://pastebin.com/2JB2yGTf
meta_ress.py und xmlhandler.py hab ich nicht gepastet weil die eigentlich nix mit der gui zu tun haben.

Zur Installation: Ich habe einfach meine lokale Installation auf ein Netzlaufwerk gepackt und rufe die py's mit der exe von dort auf. Die user kopieren sich dann noch 1-2 dlls und das wars.
lunar

@patmaster: Relative Pfade hängen vom Arbeitsverzeichnis ab, sprich, jeder Nutzer müsste das Programm aus demselben Verzeichnis heraus starten. Nutze .applicationDirPath(), um das Verzeichnis des Programms herauszufinden, und lade Deine Symbole relativ zu diesem Verzeichnis (siehe "os.path.join()").
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

lunar hat geschrieben:@patmaster: Relative Pfade hängen vom Arbeitsverzeichnis ab, sprich, jeder Nutzer müsste das Programm aus demselben Verzeichnis heraus starten. Nutze .applicationDirPath(), um das Verzeichnis des Programms herauszufinden, und lade Deine Symbole relativ zu diesem Verzeichnis (siehe "os.path.join()").
Danke für den Tipp, hat aber leider nix gebracht.
Als Pfad hat es mir den Installfolder im Netzwerk ausgespuck. Ich hab dann relativ dazu den Pfad zu den icons angegeben, hatte damit aber leider keinen Erfolg.
Wenn es am Pfad liegen würde, sollten dann nicht zumindest absolute Pfade funktionieren ?...tun sie nämlich nicht.
lunar

@patmaster: Zeige bitte den Quelltext mit absoluten Pfaden…

Nutzt Du py2exe? Falls ja, stelle sicher, dass die in der erzeugten EXE enthaltene Qt-Version vollständig ist, insbesondere, dass sie alle Image-Plugins enthält.
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Ich nutze kein py2exe
hier mit absoluten Pfaden: http://pastebin.com/wCRTWNHn

Ich hab jetzt versucht mit dem ressource System zu arbeiten.
Habe also im Designer eine ressoruce erstellt und mit pyrcc4 kompiliert, wobei das rauskommt:

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Resource object code
#
# Created: Do 12. Jul 12:57:49 2012
#      by: The Resource Compiler for PyQt (Qt v4.8.2)
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore

qt_resource_data = b"\
\x00\x00\xc2\xf2\
\x00\
\x05\xa5\x96\x78\x9c\xec\xbd\x09\x70\x54\xd7\x95\x3f\xcc\x7c\x19\
\x7f\xf9\xa7\x5c\x2e\x4f\x2a\x95\x4a\xa5\x5c\xf9\x3c\x53\xa9\x54\

...noch sehr viel mehr davon...

\x05\x77\x43\x96\
\x00\x6c\
\x00\x6f\x00\x61\x00\x64\x00\x2e\x00\x67\x00\x69\x00\x66\
"

qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
\x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\xc2\xf6\
\x00\x00\x00\x20\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
"

def qInitResources():
    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()
Referenzieren tu ich nun so:

Code: Alles auswählen

self.setWindowIcon(QtGui.QIcon(":icon/grabber.ico"))
Haut wieder bei mir am Rechner hin und sonst bei keinem :(

Wäre für Hilfe sehr dankbar !
patmaster
User
Beiträge: 106
Registriert: Donnerstag 3. Februar 2011, 17:21

Okay Problem gelöst :D.
Ich hab das ganze jetzt mit cx_freeze deployed und alles haut wunderbar hin.
Hätt ich gleich machen sollen, das mit der Installation auf nem Netzlaufwerk is eh doof.
Antworten