keyPressed - Signal um Bilder während der Runtime abbilden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Servus,

derzeit hänge ich an einer Lösung für folgendes Problem:

Mittels

Code: Alles auswählen

def keyPressEvent(self,event):
        if event.key() == QtCore.Qt.Key_1:
              self.gameloop(1)
        elif event.key() == QtCore.Qt.Key_2:
              self.gameloop(2)
        elif event.key() == QtCore.Qt.Key_3:
              self.gameloop(3)
    usw ...    
fange ich derzeit die Tastenbelegungen 1-8 ab. Je nach Tastendruck möchte ich gerne ein neues Bild anzeigen lassen an einer gewissen Position auf meinem Mainframe.

Defaultmäßig füge ich Bilder folgendermaßen hinzu:

Code: Alles auswählen

        label = QtGui.QLabel(self)
        label.setGeometry(0,15, 600,800)
        label.setPixmap(QtGui.QPixmap(os.getcwd()+"/images/image.png"))
Da insgesamt bis zu beispielsweise 64 Bilder hinzugefügt werden möchte ich diese 'dynamisch' während der Laufzeit generieren, jedoch fehlt mir dazu der Lösungsansatz. Ich bin zwar noch nicht besonders lange in der Python-Welt unterwegs, habe jedoch die Vermutung dass dies nur mit einem Signal erfolgen kann, um mein Window zu aktualisieren - mehr aber auch nicht momentan. :idea:

Weiss jemand hierzu eine angebrachte Lösung zu meinem derzeitigen Problem? Falls weitere Informationen benötigt werden nur zu. :wink:
Würde mich über Lösungsansätze sehr freuen!

Viele Grüße. :)
BlackJack

@flooojava: Mir fehlt hier jetzt irgendwie die konkrete Frage. Du zeigst kleine Code-Ausschnitte, sagst aber nicht was daran nicht funktioniert.
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Hallo BlackJack,

mein Problem ist, dass ich leider noch keine Herangehensweise gefunden habe, wie mein Vorhaben zu realisieren ist. Ich möchte also bei einem "keyPressed" ein Bild meinem MainWindow hinzufügen. Besteht die Möglichkeit dies ähnlich wie auch schon bei der Initialisierung des Fensters mit

Code: Alles auswählen

 label = QtGui.QLabel(self)
            label.setGeometry(0,15, 600,800)
            label.setPixmap(QtGui.QPixmap(os.getcwd()+"/images/image.png"))
zu vollenden? Wenn ja - was muss ich genau beachten? Leider hat dieses vorhaben nicht funktioniert.

Als kleines Beispiel, welches das Problem schildern sollte:

Code: Alles auswählen

def addImage():
         labelnew = QtGui.QLabel(self)
         labelnew.setGeometry(0,15, 600,800)
         labelnew.setPixmap(QtGui.QPixmap(os.getcwd()+"/images/imagenew.png"))
und in der keyPressed Funktion:

Code: Alles auswählen

def keyPressEvent(self,event):
        if event.key() == QtCore.Qt.Key_1:
              self.gameloop(1)
              self.addImage()


Wirft zwar keinen Fehler auf diese Art & Weise, dennoch wird das Bild(Label) nicht angezeigt, fehlt hierzu evtl. ein Update der GUI oder funktioniert es mit dieser einfachen Art & Weise nicht? Dann würden wir wieder zu Signals kommen, falls dies notwendig ist? :K

Grüße
BlackJack

@flooojava: Zeig doch mal ein komplettes aber minimales Beispiel. Der `gameloop()`-Aufruf kehrt auch zurück und enthält nicht etwa eine Schleife die das verhindert?
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Ja, da wird prinzipiell nur was in der Console ausgegeben, nicht mehr und nicht weniger. Ist eigentlich zum vernachlässigen. ;)

Wenn es nötig ist werde ich morgen Code nachliefern, dennoch bin ich der Ansicht dass entweder a) dieses Konzept unter Python aufgrund von QT nicht möglich ist, da wir uns quasi in der GUI "befinden" und somit das ganze gefreezed ist? oder b) Es wird zwar alles korrekt ausgeführt aber das Window muss refreshed werden? oder c) ohne Signals kommt man nicht zum gewünschten Ergebnis.

Leider bin ich nicht fündig geworden im Web, wie Bilder während der Laufzeit in einem Window platziert werden mittels einem Tastendruck.

Viele Grüße
Antworten