2010-06-10 5 views
20

J'essaie d'implémenter une fonction. Mon code est donné ci-dessous. Je veux obtenir le texte en ligne avec le nom d'objet 'host' dans une chaîne par exemple 'shost' quand l'utilisateur clique sur le bouton avec le nom 'connect'. Comment puis-je faire ceci? J'ai essayé et échoué. Comment puis-je implémenter cette fonction?Comment obtenir du texte dans QlineEdit lorsque QpushButton est enfoncé dans une chaîne?

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_() 

Comment puis-je implémenter la fonction "button_click"? Je viens de commencer avec pyQt!

+0

Vous obtiendrez plus facilement une réponse si vous postez un extrait de code qui fonctionne réellement. – brianz

Répondre

27

Ma première suggestion est d'utiliser Designer pour créer vos interfaces graphiques. Les taper dehors suce, prend plus de temps, et vous ferez certainement plus d'erreurs que Designer.

Voici quelques PyQt tutorials pour vous aider à être sur la bonne voie. Le premier dans la liste est où vous devriez commencer.

Un bon guide pour déterminer quelles méthodes sont disponibles pour des classes spécifiques est le PyQt4 Class Reference. Dans ce cas, vous devez rechercher QLineEdit et voir la méthode text.

Pour répondre à votre question:

Pour que vos éléments d'interface graphique disponible pour le reste de l'objet, les faire précéder 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

Je reçois cette erreur! AttributeError: l'objet 'Form' n'a pas d'attribut 'le' – esafwan

+0

Vous devez le nommer 'self.le' dans votre fonction' __init__'. Partout où vous l'utilisez dans votre classe 'Form', il devrait être' self.le'. – tgray

+0

Je ne t'ai pas eu. Désolé, je commence juste avec ces ... j'ai utilisé le code que vous avez donné, et l'erreur est venue. Je pense en elle, c'est déjà self.le – esafwan

0

Le nom de l'objet est pas très important. ce que vous devriez focalisez à est la variable qui stocke l'objet lineEdit (le) et votre objet bouton-poussoir (pb)

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

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

Je pense que c'est ce que vous voulez. J'espère avoir reçu votre question correctement :)

Questions connexes