Fehlermeldung event-Programmierung

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
hive
User
Beiträge: 7
Registriert: Sonntag 15. März 2009, 20:14

Hallo,

Habe Folgendes programmiert um einmal die event-programmirung zu testen

Code: Alles auswählen

class Suche(QtGui.QDialog, Dlg):
   def __init__(self):
      QtGui.QDialog.__init__(self)
      self.setupUi(self)    


      def event(self,event):
            print event.type()
Das funktioniert gut, ich bekomme fuer jedes Ereignis die Nummer angezeigt und kann laut der Tabelle in:

http://www.riverbankcomputing.co.uk/sta ... event.html
verfolgen, welches Ereignis eingetreten ist.

Somit ist es moeglich mit:

Code: Alles auswählen

      def event(self,event):
            if event.type() == 10: # mouse-pointer enter
                self.enter_function() # eigene funktion, die in diesem Fall ausgefuehrt wird.
Nur eines stoert mich. Auf der Kommandozeile wird neben der Ereignisnummer immer der Fehlertext:

Code: Alles auswählen

TypeError: invalid result type from Suche.event()
ausgegeben.
Koennte ich ignorieren, aber ist ein Schoenheitsfehler.

Weiss jemand Rat?

hive
lunar

Wenn du an einem Ereignis des Fenstersystems interessiert bist, dann solltest du nicht ".event()" überschreiben, sondern die jeweils passende, vordefinierte Methode (in diesem Fall ".enterEvent()"). Am besten liest du mal das entsprechende HowTo in der Dokumentation.

Desweiteren hilft es natürlich ungemein, die Dokumentation der überschriebenen Methode zu lesen. Dort steht, dass ein boolscher Rückgabewert erwartet wird. Du gibst aber nichts zurück.
hive
User
Beiträge: 7
Registriert: Sonntag 15. März 2009, 20:14

Ich will nichts ueberschreiben. Wo tue ich das?

Ich brauche die Nummer des Events um dann entscheiden zu koennen, was ich fuer richtig halte.

Ich bekomme die Nummer, fragte nur, wie auch mit Nummer die Fehlermeldung zu verhindern waere.

Wenn ich per Icon auf dem Desktop die Sache starte, sehe ich die Meldung nicht, kann mir also egal sein.
Mein Interesse gilt allein, wie bekomme ich die Nummer des Events ohne Fehlermeldung.

hive
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du erbst von `QDialog()`. Dieses hat bereits eine `event()`-Methode. Wenn du in deiner Klasse eine Methode mit dem selben Namen anlegst, dann überschreibst du damit die alte Methode. Das heißt, statt der ursprünglichen Methode für Events, wird deine aufgerufen. Deine Methode gibt aber nicht das zurück, was das aufrufende Objekt erwartet. Erwartet wird nämlich ein boolscher Wert. Und dies führt zu der Fehlermeldung, da du nämlich überhaupt nichts zurück gibst. Eigentlich hat Lunar dir das auch schon alles gesagt. Aber vielleicht wird dir nun deutlicher, dass deine Frage bereits beantwortet wurde. ;)

Übrigens würdest du dir das Leben IMHO leichter machen, wenn du dich an die von Qt eingeführten Konstanten hälst, denn dann erübrigen sich eigentlich Kommentare wie `mouse-pointer enter`. Eine Auflistung findest du hier.

Noch sinniger wäre es aber halt, wenn du deine Funktion direkt in `enterEvent()` packst. Dann müsstest du den Event-Typ gar nicht mehr prüfen (ungetestet, aber ich denke mal das ist so gemeint) und somit auch `event()` nicht überschreiben. Falls du aber immer noch von jedem Event die Nummer haben willst, musst du das natürlcih weiterhin über `event()` machen und dann - wie im Howto beschrieben - die ursprüngliche Methode (also `QDialog.event(self, event)`) aufrufen, damit eben das richtige zurückgegeben wird und keine Fehlermeldung kommt.
hive
User
Beiträge: 7
Registriert: Sonntag 15. März 2009, 20:14

snafu hat geschrieben: Noch sinniger wäre es aber halt, wenn du deine Funktion direkt in `enterEvent()` packst.
Genau das weiss ich wie es geht! (Es gibt ja Dokumentationen!)

Aber mein Ziel ist anhand der Event Nummer selektieren zu koennen.

hive
lunar

Nur so nebenbei: Warum benötigst du denn unbedingt die Nummer, bzw. warum willst du unbedingt nach der Nummer auswählen?
Antworten