2 Bilder mit einem Button anklicken

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

Hallo Freunde,

ich habe 2 Bilder zum anzeigen.
Die ich mit cv2.imread einlese
dazu hab ich auch einen ButtonHandle, der auf Knopfdruck entscheidet, was getan werden soll.

Ich würde zwar gerne mein Code posten, jedoch ist es viel zu lang :K


beim Init hab ich ein Standartbild, so wenn ich nun ein Kopf drücke, das andere Bild zu nehmen und es
in meinem Widget einzusetzen, scheitert er. :K :K
BlackJack

@Sebi.Schneider: Wie soll man denn bei *der* Beschreibung helfen? Das einzige was man sagen kann: Du machst in dem Quelltext den Du nicht zeigst irgendetwas falsch. Wenn man weder Quelltext noch Fehlermeldung zeigt, kann man ja nicht einmal vernünftig raten woran es liegen könnte.

Wenn der Quelltext zu lang ist, dann reduziere ihn auf das minimal notwendige was immer noch das Problem enthält. Also ein minimal lauffähiges Beispiel was jeder möglichst einfach nachvollziehen kann.
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Sebi.Schneider hat geschrieben:Ich würde zwar gerne mein Code posten, jedoch ist es viel zu lang :K
Wie kann der Code denn bei zwei Bildern und einem Button zu lang für deinen Beitrag sein?
(Zumal das Forum vertikal skaliert, rein theoretisch(!) könnte man unendlich langen Code posten. :wink: )

Was meinst du denn mit Standard-Bild? Soll der Button beim Click ein anderes Icon bekommen oder was willst du machen?

Fragen über Fragen...
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@BlackJack
ja da hast du Recht. hier mein Code

Code: Alles auswählen

class MyMainWindow(QtGui.QWidget):

    def __init__(self):
           # add widget to show the augmented video input image
        if self.videoAnzeige:
            print "VIdeoAnzeige", self.videoAnzeige
            arWidget = ARWidget(self.cameraDevice)
            arWidget.newFrame.connect(self.onNewCameraFrame)
            vbox.addWidget(arWidget)
        else:
            image = cv2.imread('smarties.jpg')
            arWidget = ARWidget(image)
            vbox.addWidget(arWidget)

# hier kommen dann das Hinzufügen von Buttons

def buttonHandle(self):.....




if __name__ == "__main__":
.....
.....
BlackJack

@Sebi.Schneider: Der Quelltext ist nicht lauffähig. Daran kann man im Grunde überhaupt nichts erkennen, ausser das `self.videoAnzeige` verwendet wird, bevor es definiert wurde. Zumindest anhand dessen was Du zeigst.
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@BalckJack

Hab dir mal ne PN geschrieben, mit dem gesamten Code. Hoffe du kannst mir da etwas helfen

PS: Gibt es jemanden, der in diesem speziellen Fach ComputerVision, (python) Nachhilfe gegen Bezahlung gibt, gerne auch ONLINE.
Bitte PN an mich
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Code: Alles auswählen

self.videoAnzeige
...
self.cameraDevice
...
self.onNewCameraFrame
Wo sind diese denn deklariert?

Code: Alles auswählen

if __name__ == "__main__":
.....
.....
Was passiert hier? Sollen wir das erraten? :roll:

Vielleicht den Hinweis von BlackJack genauer beachten:
BlackJack hat geschrieben:... Also ein minimal lauffähiges Beispiel was jeder möglichst einfach nachvollziehen kann.
Ohne lauffähigen Code, der beim Ausführen den Fehler reproduziert, kann dir niemand helfen!
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@Madmartigan hab an dich den Code mal gesendet, vllt hast du dadurch etwas eine bessere Übersicht was ich vorhabe
BlackJack

@Sebi.Schneider: Es macht wenig Sinn für ein Forum wenn Du jetzt jeden privat und einzeln fragst.

Der Quelltext macht den Eindruck als wenn Du Grundlagen von objektorientierter Programmierung in Python nicht verstanden hast. Man kann zum Beispiel nicht gleichzeitig verschiedene Werte an das selbe Attribut binden. Ein Attribut hat zu einem Zeitpunkt immer genau einen Wert. Wenn Du nacheinander verschiedene Werte an das selbe Attribut bindest, dann hat das Attribut am Ende den Wert der als letztes gebunden wurde. Bei `ARWidget.__init__` „gewinnt” also die zweite definition. Das erste ``def __init__(…):`` hat damit keinen Effekt. Das zusammen mit einigen überflüssigen Semikolons lässt vermuten, dass Du da eigentlich in einer anderen Programmiersprache „denkst”.

Was den hier gezeigten Ausschnitt angeht: Nach dem ich nun die gesamte `MyMainWindow.__init__()` gesehen habe macht das ``if self.videoAnzeige:`` keinen Sinn, denn weiter oben in der Methode wird `self.videoAnzeige` an `False` gebunden und dazwischen steht nichts was das ändern könnte. Bei dem ``if``/``else`` wird also *immer* der ``else``-Zweig ausgeführt, was diese Unterscheidung unsinnig macht. Genau so wenig Sinn macht es in der Behandlung der Schaltflächen *neue* `MyMainWindow`-Objekte zu erstellen, die dann auch gleich wieder verworfen werden.
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@BlackJack die self.AnzeigeVideo wird jedoch auf True gesetzt, falls der Button "Video Anzeigen" geklickt wurde.

Die zweite Init Methhodennamen hab ich init2 unbenannt

Folgende Fehlermeldung:

Traceback (most recent call last):
File "C:/Users/karaayak/PycharmProjects/Uebung05/Uebung05.py", line 520, in <module>
w = MyMainWindow()
File "C:/Users/karaayak/PycharmProjects/Uebung05/Uebung05.py", line 280, in __init__
arWidget = ARWidget(image)
File "C:/Users/karaayak/PycharmProjects/Uebung05/Uebung05.py", line 77, in __init__
self._cameraDevice.newFrame.connect(self._onNewFrame)
AttributeError: 'numpy.ndarray' object has no attribute 'newFrame'
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die Fehlermeldung verrät dir den Fehler: numpy-ndarray-Objekte haben kein Attribute mit dem Namen newFrame. ``self._cameraDevice`` ist also nicht das Objekt, für das du es hältst.
Das Leben ist wie ein Tennisball.
BlackJack

@Sebi.Schneider: Dann ist es doch aber für das ``if``/``else`` in der `__init__()` zu spät. Das wird ja nicht auf magische Weise noch einmal ausgeführt nur weil sich ein an der ``if``-Bedingung beteiligter später mal ändert. Das ``if`` macht an der Stelle einfach keinen Sinn.
Antworten