Hallo,
danke für die schnelle Antwort. Hab mir deine Vorschläge sehr oft durchgelesen.
Ok, das die Methode Connection_SAS() nicht aufgerufen wird ist ein blöder Fehler, das ist jetzt korregiert.
Jetzt zum 2ten Teil deiner Kritik. Der war vom Verständniss für mich total schwer, aber ich hoffe ich habe es verstanden.
-In einem Modul darf keinem Name eine Methode zugewiesen werden. Ich nehme mal an du meinst mit Name ein Attribut(Wollte ich nur zum besseren Verständniss festhalten). Desweiteren steht geschrieben das weder Sig noch Ausgabe Attribute meiner Klasse seien.
Du machst mich damit also auf Fehler in dem connect_SAS() Befehl aufmerksam.
Jedoch habe ich mir das von der Doku:
http://www.riverbankcomputing.co.uk/sta ... slots.html abgeschaut. Da gibt es unter der Überschrift "Connecting, Disconnecting and Emitting Signals" ein Beispiel mit einer Klasse Foo. Da wird auch ein Signal erzeugt (Das Signal heißt Trigger) und der connect Befehl dann so geschrieben:
self.trigger.connect(self.handle_trigger) ...Ja und dann hab ichs analog gemacht.
self.Sig.connect(Ausgabe)
Was ich jetzt glaube ich verstanden hab ist, das man eine Methode an ein Exemplar binden muß. Das geschieht indem ich in der Klasse
das self in die Klammer schreibe... War mir so ehrlich gesagt nicht klar...
Jetzt noch etwas zu den Signalen. Ich erzeuge mein Signal richtig wie hast du gesagt. Der Sende()-Funktion muss ja aber der Datentyp Student übergeben werden. Schreibe ich da jetzt def Sende(self, Student): oder def Sende(self,Sig):? Bei der Ausgabe hab ich ja auch das gleiche Problem. Da weiß ich einfach net was ich da schreiben soll....
Und warum wird mein Signal nicht erkannt? Gab schon oft die Fehlermeldung "global name Sig is not definiert"..... Find ich auch komisch... Hab ich ja oben hingeschrieben.....
Noch auf deine letzte Frage bezüglich der Reihenfolge der Zuweisungen: (Ich beziehe mich allerdings auf meinen bis jetzt korrigierten Code (s.unten) )
1. Ich fange mit der main()-Funktion an.
1.1 Erzeugung ein Student Exemplares das ich Andi nenne.
1.2 Diesem Exemplar Andi weiße ich seine Attribute zu. Nämlich den Attributname self.name -> "Andi" usw.
1.3 Jetzt erzeuge ich deine Exemplar von der Foo Klasse. Dieses Exemplar nenne ich Test.
2 Generelle Ablauf wenn ein Exemplar von Foo erzeugt wird.
2.1 Der Konstruktor wird aufgerufen. In diesem Moment wird die Methode connect_SAS aufgerufen die sofort das Signal Sig mit der Ausgabe verbindet. D.h. immer wenn ein Sig-Signal emmitiert wird, tut die Ausgabe Methode dieses Signal empfangen.
2.2 Dann steht da geschrieben wie ich mir ein Signal definiere. Also gibt es einen Signaltyp den ich Sig nenne, der den Datentyp Signal sendet.
2.3 In der Methode Sende() wird dann dieses Signal ausdrücklich emmitiert. Dieser Methode muss ich allerdings noch ein Exemplar des Datentyps Student übergeben damit eindeutig ist welches Signal versendet werden soll.
3 Wenn dann in der main()-Funktion z.b. Test.Sende(Andi) geschrieben steht, dann wird der Methode Sende() des Exemplars Test der Datentyp Andi übergeben der dann gesendet empfangen und letztendlich von Ausgabe geprinted wird.....
So SOLL es zumindest werden.... Funzt aber nicht..... Hier erstmal der Code...
Code: Alles auswählen
class Foo(QObject):
def __init__(self, parent=None): # Konstruktor
self.Connection_SAS() # Verbindet Signal&Slot
# Definiert die Art meines Signals
Sig = pyqtSignal([Student])
#Verbindung von meinem Signal zur Ausgabe/Slot
def Connection_SAS(self):
self.Sig.connect(self.Ausgabe)
#Sendet Signal
def Sende(self, Student):
self.emit([Sig])
#Ausgabe
def Ausgabe(self):
print Student.name
def main(): # Main
Andi = Student("Andi", "MB", 23523)
Test = Foo()
Test.Sende(Andi)
Hier die Fehlermeldung:
Code: Alles auswählen
File "F:\9. Versuche\test.py", line 30, in Connection_SAS
self.Sig.connect(self.Ausgabe)
TypeError: pyqtSignal must be bound to a QObject, not 'Foo'
Diese Fehlermeldung ärgert mich jetzt ganz besonders da ich dachte ich hätte die Methoden an Exemplare gebunden. Warum das nicht so ist, keine Ahnung.
Jo, für Hilfen wäre/bin ich sehr dankbar. Das Forum ist echt super.
mfg