web-dev-qa-db-fra.com

Comment obtenir du texte dans QlineEdit lorsque QpushButton est pressé dans une chaîne?

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 disant 'shost' lorsque l'utilisateur clique sur le bouton poussoir avec le nom 'connect'. Comment puis-je faire ceci? J'ai essayé et échoué. Comment implémenter cette fonction?

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

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

31
esafwan

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

Voici quelques tutoriels PyQt pour vous aider à vous mettre sur la bonne voie. Le premier de la liste est l'endroit où vous devez 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 devriez rechercher QLineEdit et voir qu'il existe une méthode text.

Pour répondre à votre question spécifique:

Pour rendre vos éléments GUI disponibles pour le reste de l'objet, faites-les précéder de 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_()
38
tgray

Le nom de l'objet n'est pas très important. vous devez vous concentrer sur 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 tu veux. J'espère avoir bien répondu à votre question :)

0
lionel319