[PYQt4] Signals und Slots

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
brodo
User
Beiträge: 2
Registriert: Dienstag 15. August 2006, 17:52

[PYQt4] Signals und Slots

Beitragvon brodo » Mittwoch 21. Februar 2007, 00:41

Hallo, ich versuche gerade durch einen klick auf den button "addFeed" eine Methode zu starten.

Am besten zeig ich mal was ich bisher hab:

Code: Alles auswählen

class AmarokRSSApp(QtGui.QApplication):
   mainWindow = QtGui.QMainWindow
   addFeedDialog = QtGui.QDialog
   def __init__(self, args):
      QtGui.QApplication.__init__(self,args)
      self.mainWindow = AmarokRSSMainWindow()

class AmarokRSSMainWindow(QtGui.QMainWindow):
   def __init__(self):
           QtGui.QMainWindow.__init__(self)
           self.ui = Ui_MainWindow()
           self.ui.setupUi(self)
      def openAddFeedDialog():
         app.addFeedDialog = AmarokRSSAddFeedDialog()
      self.connect(self.ui.addFeed, QtCore.SIGNAL("clicked()"),self.openAddFeedDialog)
           
      self.show()

Wenn ich das so ausführe bekomme ich immer "AttributeError: openAddFeedDialog" in Zeile 15.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 21. Februar 2007, 12:06

Der kommt deshalb, weil deine Klasse keine Methode diesen Namens hat. Das ist deshalb so, weil du stellenweise zu weit eingerückt hast (Zeile 13-14).
brodo
User
Beiträge: 2
Registriert: Dienstag 15. August 2006, 17:52

Beitragvon brodo » Mittwoch 21. Februar 2007, 15:28

hast recht!! danke. aber warum meckert der interpreter da denn nicht? also das die einrückung falsch ist.
lunar

Beitragvon lunar » Mittwoch 21. Februar 2007, 15:37

brodo hat geschrieben:hast recht!! danke. aber warum meckert der interpreter da denn nicht? also das die einrückung falsch ist.


Weil die Syntax trotzdem legal ist! Du kannst in Python sehr wohl Funktionen in Funktionen definieren.
In deinem Fall gibt es zwar keine Methode AmarokRSSMainWindow.openAddFeedDialog, aber es gibt die Funktion AmarokRSSMainWindow.__init__.openAddFeedDialog.

Btw, du hast bei openAddFeedDialog auch das "self" in der Deklaration vergessen.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Donnerstag 22. Februar 2007, 11:57

Richtig, du definierst so eine lokale Funktion. Ich würde aber vermuten, dass ein Fehler geworfen würde, wenn du das fehlende self in der Signatur hättest, weil lokale Methoden für mich keinen Sinn machen und dann gäbe es auch was zu meckern.
BlackJack

Beitragvon BlackJack » Donnerstag 22. Februar 2007, 15:03

`self` ist ein Name wie jeder andere auch, also kein Grund für den Compiler zum meckern.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder