Как получить текст в QlineEdit при нажатии QpushButton в строке? - PullRequest
29 голосов
/ 10 июня 2010

Я пытаюсь реализовать функцию. Мой код указан ниже.

Я хочу получить текст в строке с именем объекта «host» в строке «shost», когда пользователь нажимает кнопку с именем «connect». Как я могу это сделать? Я пытался и потерпел неудачу. Как мне реализовать эту функцию?

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

Теперь, как мне реализовать функцию "button_click"? Я только начал с pyQt!

Ответы [ 2 ]

36 голосов
/ 10 июня 2010

Мое первое предложение - использовать Designer для создания ваших графических интерфейсов.Вводить их самостоятельно - отстой, отнимать больше времени, и вы определенно будете совершать больше ошибок, чем Designer.

Вот несколько PyQt обучающих программ , которые помогут вам выбрать правильный путь.Первый в списке - то, с которого вам следует начать.

Хорошим руководством для выяснения того, какие методы доступны для определенных классов, является PyQt4 Class Reference .В этом случае вы должны поискать QLineEdit и увидеть, что существует метод text.

Чтобы ответить на ваш конкретный вопрос:

Чтобы сделать элементы GUI доступными для остальныхобъект, предваряйте их 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 голосов
/ 11 июня 2010

Имя объекта не очень важно. то, на чем вы должны сосредоточиться - это переменная, которая хранит объект lineedit (le) и ваш объект кнопки (pb)

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

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

Я думаю, это то, что вы хотите. Надеюсь, я правильно понял ваш вопрос:)

...