Seite 1 von 1

[PYQt4] Signals und Slots

Verfasst: Mittwoch 21. Februar 2007, 00:41
von brodo
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.

Verfasst: Mittwoch 21. Februar 2007, 12:06
von Y0Gi
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).

Verfasst: Mittwoch 21. Februar 2007, 15:28
von brodo
hast recht!! danke. aber warum meckert der interpreter da denn nicht? also das die einrückung falsch ist.

Verfasst: Mittwoch 21. Februar 2007, 15:37
von lunar
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.

Verfasst: Donnerstag 22. Februar 2007, 11:57
von Y0Gi
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.

Verfasst: Donnerstag 22. Februar 2007, 15:03
von BlackJack
`self` ist ein Name wie jeder andere auch, also kein Grund für den Compiler zum meckern.