[PYQt4] Signals und Slots

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

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

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

hast recht!! danke. aber warum meckert der interpreter da denn nicht? also das die einrückung falsch ist.
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.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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

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