PySide Probleme

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

Hi
ich bin grad dabei mich in PySide ein zu arbeiten
allerdings hab ich da ein kleines Problem
Ich möchte gern ein Bild laden nur bekomme ich das Bild einfach nicht geladen
hier mich Code

Code: Alles auswählen

        self.grafik = QImage()
        self.grafik.load('logo.jpg')
        if self.grafik.isNull():
            print "fail"
        else:
            print "work"
gruß ScooB
lunar

@ScooB: Das funktioniert nur, wenn sich das Bild im aktuellen Arbeitsverzeichnis der Anwendung befindet. Ist das denn der Fall?
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

@lunar

jepp soweit habe Ich auch noch gedacht :)
Ich habe auch schon den ganzen Pfad angegeben aber trozdem tut sich nichts

Gibt es eigentlich irgendwelche guten Tuts oder Dokus zu PySide bin so langsam am verzweifeln
lunar

@ScooB: Zeige doch bitte den Quelltext, wie Du den vollständigen Pfad angegeben hast. Ansonsten kann man nur raten.

Im Übrigen ist es sinnvoller, den Rückgabewert von ".load()" auszuwerten. Du kannst das Bild ansonsten auch mit "open()" öffnen, und anschließend ".loadFromData()" nutzen. Dann erhältst Du im Fehlerfall eine Ausnahme von Python mit entsprechenden Informationen über die Fehlerursache.
Zuletzt geändert von lunar am Montag 9. Mai 2011, 10:33, insgesamt 1-mal geändert.
BlackJack

@ScooB: Also folgendes Skript gibt bei mir `False` aus -- funkioniert also:

Code: Alles auswählen

from PySide.QtGui import *

image = QImage()
image.load('test.jpg')
print image.isNull()
'test.jpg' liegt im Arbeitsverzeichnis. Wenn das bei Dir nicht funktioniert, dann ist irgend etwas ziemlich komisch.
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

Code: Alles auswählen

import sys
from PySide.QtCore import *
from PySide.QtGui import *


class main_window(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setAutoFillBackground(True)
        self.resize(700,700)
        self.setWindowTitle(' - Schaltanlagenkalkulationstool')
        self.setWindowIcon(QIcon(':gfx\logo.jpg'))
        
        btn1 = QPushButton('Motorauswahl', self)
        btn1.resize(300, 40)
        btn1.setFont(QFont("Times", 18, QFont.Bold))

        
        self.grafik = QImage()
        self.grafik.load('logo.jpg')
        print self.grafik.isNull()
das ist mein ganzer Code
und es will einfach nicht laden
ich benutze Python 2.6.6 Pyside 1.0.2
langsam wird es echt merkwürdig
lunar

@ScooB: Würde das Bild tatsächlich im Arbeitsverzeichnis der Anwendung liegen, müsste der gezeigte Quelltext funktionieren. Wenn nicht, dann zeige bitte einmal Deine Verzeichnisstruktur, und wie genau Du das Programm ausführst.

Wird das Symbol des Fensters denn geladen?
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

auf das Symbol habe ich jetzt auch nicht geachtet das hatte ich noch von PyQt drin allerdings ladet es auch nicht

C:\Users\k578072\Desktop\Dev\Schaltanlagenkalkulationstool\src
dort liegt die .py Datei und die .jpg Datei

Ausgeführt wird es über Eclipse mit PyDev
Habe es auch schon mit IDLE vesucht, geht auch nicht

Ich habe auch schon einige Bespiele von
http://qt.gitorious.org/pyside/pyside-e ... ees/master
ausprobiert und da hat es funktioniert
lunar

@Scoob: Führst Du die Anwendung denn auch aus dem Verzeichnis "C:\Users\k578072\Desktop\Dev\Schaltanlagenkalkulationstool\src" heraus aus?

Versuche alternativ einmal, das Symbol relativ zum Dateinamen des Skripts zu laden:

Code: Alles auswählen

SCRIPT_DIRECTORY = os.path.dirname(os.path.abspath(__file__))

class main_window(QMainWidow):
    def __init__(self):
        # …
        self.grafik.load(os.path.join(SCRIPT_DIRECTORY, 'logo.jpg'))
Noch ein paar Anmerkungen zum Quelltext. Die Namensgebung sollte PEP 8 folgen (also "MainWindow" statt "main_window"), und die Oberfläche sollte Layoutverwaltung statt absoluter Positionierung nutzen.
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

Also ich bin mal etwas weiter

ich habe die jpg gegen eine png ersetzt die ladet er ja
halt die jpg nicht, merkwürdig ich mach erst mal mit png weiter bevor mein Kopf noch explodiert

Danke für die schnelle Hilfe
lunar

Wenn Du wirklich nur das Bildformat geändert hast, dann ist Deine Qt Installation fehlerhaft, da ihr offenbar das Plugin für JPG-Bilder fehlt.
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

Jepp so wars ich hab PySide neu installiert und jetzt geht es wieder
wieder unnötig den Kopf zerbrochen
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

So nächste Frage zu PySide

Ich möchte in einer QMdiArea ein zweites fenster über eine Toolbar öffnen

Code: Alles auswählen

    def home_(self):
        homechild=start_window()
        self.mdiArea.addSubWindow(homechild)      
        
        
        
    def createToolBars(self):
        'EXIT'
        self.exitToolBar = self.addToolBar("Exit")
        self.exit = QAction(QIcon('gfx\exit.png'), 'Exit', self)
        self.connect(self.exit, SIGNAL('triggered()'), SLOT('close()'))      
        self.exitToolBar.addAction(self.exit)
        'EXIT END'
        
              
        homeToolBar = self.addToolBar('Home')
        home = QAction(QIcon('gfx\new.png'), 'HOME', self)
        homeToolBar.connect(home, SIGNAL("triggered()"), self.home_())
        homeToolBar.addAction(home)
        

er geht in home_ rein allerdings öffnet er kein zweites Fenster
lunar

@ScooB: Neues Problem, neuer Thread bitte. In diesem Fall wird "homechild" am Ende der Funktion wieder gelöscht, da es ein lokaler Name ist, und Du wahrscheinlich kein "parent" bei der Erzeugung übergibst (was man nur vermuten kann, da Du Dich nicht dazu herabgelassen hast, auch den Quelltext von "start_window()" zu zeigen).
ScooB
User
Beiträge: 54
Registriert: Donnerstag 28. April 2011, 10:47

@lunar: Danke und Sorry ich werd einen neuen Thread erstellen
Antworten