2010-06-10 4 views
20

Ich versuche, eine Funktion zu implementieren. Mein Code ist unten angegeben.Wie bekomme ich Text in QlineEdit, wenn QpushButton in einer Zeichenfolge gedrückt wird?

Ich möchte den Text in lineedit mit Objektname 'Host' in einer Zeichenfolge sagen 'Shost', wenn der Benutzer auf die Drucktaste mit dem Namen 'Connect' klickt. Wie kann ich das machen? Ich habe es versucht und gescheitert. Wie implementiere ich diese Funktion?

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 


class Form(QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 

     le = QLineEdit() 
     le.setObjectName("host") 
     le.setText("Host") 
     pb = QPushButton() 
     pb.setObjectName("connect") 
     pb.setText("Connect") 
     layout.addWidget(le) 
     layout.addWidget(pb) 
     self.setLayout(layout) 

     self.connect(pb, SIGNAL("clicked()"),self.button_click) 

     self.setWindowTitle("Learning") 

    def button_click(self): 
    #i want the text in lineedit with objectname 
    #'host' in a string say 'shost'. when the user click 
    # the pushbutton with name connect.How do i do it? 
    # I tried and failed. How to implement this function? 




app = QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 

Wie implementiere ich nun die Funktion "button_click"? Ich habe gerade mit pyQt angefangen!

+0

Sie sind eher eine Antwort erhalten, wenn Sie ein Code-Snippet, das tatsächlich funktioniert post. – brianz

Antwort

27

Mein erster Vorschlag ist, Designer zu verwenden, um Ihre GUIs zu erstellen. Sie selbst zu tippen, ist nervig, braucht mehr Zeit und Sie werden definitiv mehr Fehler machen als Designer.

Hier sind einige PyQt tutorials, damit Sie auf dem richtigen Weg sind. Der erste in der Liste ist der Ort, an dem Sie anfangen sollten.

Eine gute Anleitung, um herauszufinden, welche Methoden für bestimmte Klassen verfügbar sind, ist die PyQt4 Class Reference. In diesem Fall würden Sie QLineEdit nachschlagen und sehen, dass es eine text Methode gibt.

Ihre Frage zu beantworten:

Um die GUI-Elemente zur Verfügung für den Rest des Objekts zu machen, Vorwort sie mit self.

import sys 
from PyQt4.QtCore import SIGNAL 
from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout 

class Form(QDialog): 
    def __init__(self, parent=None): 
     super(Form, self).__init__(parent) 

     self.le = QLineEdit() 
     self.le.setObjectName("host") 
     self.le.setText("Host") 

     self.pb = QPushButton() 
     self.pb.setObjectName("connect") 
     self.pb.setText("Connect") 

     layout = QFormLayout() 
     layout.addWidget(self.le) 
     layout.addWidget(self.pb) 

     self.setLayout(layout) 
     self.connect(self.pb, SIGNAL("clicked()"),self.button_click) 
     self.setWindowTitle("Learning") 

    def button_click(self): 
     # shost is a QString object 
     shost = self.le.text() 
     print shost 


app = QApplication(sys.argv) 
form = Form() 
form.show() 
app.exec_() 
+0

Ich bekomme diesen Fehler! AttributeError: 'Form' Objekt hat kein Attribut 'le' – esafwan

+0

Sie müssen es 'self.le' in Ihrer' __init__' Funktion nennen. Überall, wo Sie es in Ihrer 'Form' Klasse verwenden, sollte es' self.le' sein. – tgray

+0

Ich habe dich nicht verstanden. Entschuldigung, ich fange gerade mit diesen an ... Ich benutzte den Code, den du gabst, und der Fehler kam. Ich denke darin, es ist bereits self.le – esafwan

0

Der Objektnamen nicht sehr wichtig ist. was Sie konzentrieren sollte, ist die Variable, die das LineEdit Objekt (le) und Ihre Drucktaste Objekt (pb)

 
QObject(self.pb, SIGNAL("clicked()"), self.button_clicked) 

def button_clicked(self): 
    self.le.setText("shost") 

Ich denke, speichert das ist, was Sie wollen. Ich hoffe, ich habe Ihre Frage richtig :)