Seite 1 von 1
Signal-Slot-Problem [Anfänger]
Verfasst: Donnerstag 29. März 2012, 16:17
von hanuman
Hej,
nachdem ich nun schon die Forensuche bemüht habe & dabei leider nicht fündig werden konnte, habe ich mich hier angemeldet & möchte Euch um Hilfe bei der Lösung meines Problems bitten. Meine bisherigen Programmiererfahrungen beschränken sich auf ein bisschen Delphi vor Jahren im Studium. Das ging damals ganz gut & hat sogar Spaß gemacht!
Das Problem ist ziemlich simpel. Ein Fenster enthält je einen Button (QPushButton) & ein Edit-Feld (QLineEdit). Durch Drücken des Buttons soll die vorher in das Edit-Feld eingegebene Zeichenfolge im Konsolenfenster ausgegeben werden.
Code: Alles auswählen
from PyQt4 import QtCore
from PyQt4 import QtGui
class Fenster(QtGui.QMainWindow):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('Fenster')
self.setGeometry(400, 400, 250, 150)
edit1 = QtGui.QLineEdit()
button1 = QtGui.QPushButton('Drucken')
button1.clicked.connect(self.bclick)
layout = QtGui.QHBoxLayout()
layout.addWidget(button1)
layout.addWidget(edit1)
main_frame = QtGui.QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def bclick(self, edit):
edit = QtGui.QLineEdit(self)
text = edit.text()
print text
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
form = Fenster()
form.show()
app.exec_()
Nach meinem Verständnis wäre die Verknüpfung dieser beiden Aktionen (Button drücken, Text ausgeben) mit Signal-Slot umzusetzen. Leider gelingt mir das aber nicht. Im besten(?) Fall kriege ich zwar keine Fehlermeldung, aber es tut sich auch sonst nichts. Ich verstehe einfach, wie ich der Methode bclick begreiflich machen kann, dass sie sich den Text aus dem Edit-Feld holen soll. Und aus den verfügbaren Tutorials werde ich irgendwie nicht schlau...
Ich bin für jeden konstruktiven Beitrag dankbar!
Besten Gruß.
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Donnerstag 29. März 2012, 18:04
von lunar
@hanuman: In "bclick()" erzeugst dort ein
vollkommen neues "QLineEdit", was so ziemlich das Gegenteil von dem ist, was Du eigentlich möchtest. Du musst das in "__init__()" erzeugte "QLineEdit"-Objekt an ein Exemplarattribut binden, und in "bclick()" dann auf dieses Attribut zugreifen. Wenn Dir diese Begriffe nichts sagen, oder Du diesen Satz nicht in konkreten Code umzusetzen vermagst, dann fehlt es Dir an essentiellen Python-Grundlagen. Arbeite in diesem Fall das
offizielle Tutorial durch, und zwar mindestens bis Kapitel 9. Ohne diese Grundlagen kannst Du keine Programme mit graphischer Oberfläche entwickeln.
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Freitag 30. März 2012, 11:52
von hanuman
Hey lunar,
vielen Dank für Deine Antwort! Bisschen ernüchternd, muss ich sagen, aber Du hast ganz sicher recht. Ich habe mir gerade das Tutorial geschnappt und werde es durcharbeiten.
Besten Gruß!
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Sonntag 1. April 2012, 16:53
von MrVirus
Naja, ich arbeite jetzt seit ca 6 Jahren mit Python und habe das Wort "Exemplarattribut" noch nie gehört. Ob mir deswegen grundlegende Pythonkenntnisse fehlen wage ich mal zu bezweifeln...
Trotzdem hat Lunar Recht. Man erkennt an deinem Code, dass du das Prinzip der objektorientierten Programmierung nicht wirklich verstanden hast. Da ist es nicht besonders günstig, mit einem objektorientierten GUI Framework anzufangen. Die Lektüre des Tutorials ist sicher nicht verkehrt!
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Sonntag 1. April 2012, 19:16
von lunar
@MrVirus: „Exemplarattribut“ ist die deutsche Übersetzung des englischen Begriffs „instance attribute“, der bereits im
Tutorial, Abschnitt 9.3.3. Instance objects benutzt wird. Nach sechs Jahren mit Python muss Dir wenigstens der englische Begriff geläufig sein, und der Transfer zum deutschen Begriff sollte keine unmögliche Herausforderung mehr darstellen

Re: Signal-Slot-Problem [Anfänger]
Verfasst: Montag 2. April 2012, 20:56
von MrVirus
Ich übersetze "instance" eher mit "Instanz", ist ab hier aber auch Haarspalterei
Attribut ist mir da eher geläufig
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Dienstag 3. April 2012, 13:38
von lunar
@MrVirus: Um das Haar mal zu spalten: Diese Übersetzung ist zwar gebräuchlich, aber eigentlich einfach nur falsch. „Instanz“ hat eine ganz andere Bedeutung.

Re: Signal-Slot-Problem [Anfänger]
Verfasst: Mittwoch 11. April 2012, 08:25
von Dragonfire
Namen sind doch Schall und Rauch ...
Ich hätte es jetzt Objektfeld oder Objektdatenfeld genannt, bzw. Objektvariable ...
oder spricht da etwas gegen?
Dann gibt es noch lokale Variablen, die hier verwendet wurden ...
und Klassenvariablen (Instanzvariable ist deswegen ein wenig irreführend, da man damit auch Klassenvariablen meinen könnte ...)
Bei python heißen die wieder ganz anders ...
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Mittwoch 11. April 2012, 08:34
von Hyperion
@Dragonfire: Mir erschließt sich der Sinn Deines Beitrags nicht. Erst stellst Du einen Bezug zur vorherigen Diskussion her, dann stellst Du selber den Bezug zu Python in Deinem letzten Satz in Frage... kommt mir reichlich verworren vor.
Ich finde den Suffix "feld" bzw "datenfeld" wenig eingehend. Was ist denn ein "Feld"? Und wieso das ganze durch "Daten" einschränken? Wieso nicht einfach bei der gängigen Nomenklatur bleiben?
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Mittwoch 11. April 2012, 08:45
von Dragonfire
Hyperion hat geschrieben:@Dragonfire: Mir erschließt sich der Sinn Deines Beitrags nicht. Erst stellst Du einen Bezug zur vorherigen Diskussion her, dann stellst Du selber den Bezug zu Python in Deinem letzten Satz in Frage... kommt mir reichlich verworren vor.
Ist mir auch bewusst geworden ...
Deswegen gibt es ein neuen Thread ...
http://www.python-forum.de/viewtopic.php?f=1&t=29032
Was ist ein Attribute?
Wo liegen denn die Unterschiede zu einem Feld?
Wer hat das definiert?
Re: Signal-Slot-Problem [Anfänger]
Verfasst: Donnerstag 12. April 2012, 18:58
von wuf
Hi hanuman
So sollte es gehen:
Code: Alles auswählen
from PyQt4 import QtCore
from PyQt4 import QtGui
class Fenster(QtGui.QMainWindow):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('Fenster')
self.setGeometry(400, 400, 250, 150)
self.edit1 = QtGui.QLineEdit(self)
button1 = QtGui.QPushButton('Drucken')
button1.clicked.connect(self.bclick)
layout = QtGui.QHBoxLayout()
layout.addWidget(button1)
layout.addWidget(self.edit1)
main_frame = QtGui.QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def bclick(self):
text = self.edit1.text()
print text
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
form = Fenster()
form.show()
app.exec_()
Gruß wuf

Re: Signal-Slot-Problem [Anfänger]
Verfasst: Montag 16. April 2012, 22:07
von AlphaX2
Hi hanuman,
noch eine kurze Anmerkung. Lies am besten nochmal genau nach was ein Objekt, was Attribute und was Methoden sind. Gerade wenn es um Oberflächen geht, kann man Objekte und vor allem die Konstruktion der selben, als sehr sehr bildlich begreifen. Denn dort ist es als würdest du jemanden eine Anleitung schreiben, wie er dein Fenster "zeichnen" soll. Die Methoden (bclick) sind dann auch wirklich die Dinge, die dieses Objekt, sprich Fenster machen kann.
Mir hat das sehr gut geholfen, mir das so bildlich vorzustellen.
AlphaX2