如何在QpushButton被按下时获取QlineEdit中的文本字符串?

57 投票
4 回答
246977 浏览
提问于 2025-04-15 23:49

我正在尝试实现一个功能。下面是我的代码。

我想在用户点击名为 'connect' 的按钮时,从一个名为 'host' 的输入框中获取文本,并把这个文本存储在一个叫 'shost' 的字符串里。我该怎么做呢?我试过但没有成功。请问我该如何实现这个功能?

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!

4 个回答

2

在PyQt5中实现的接受的解决方案

import sys
from PyQt5.QtWidgets import QApplication, QDialog, QFormLayout
from PyQt5.QtWidgets import (QPushButton, QLineEdit)

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")
        self.pb.clicked.connect(self.button_click)

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

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

对象的名字其实没那么重要。你应该关注的是存储行编辑对象(le)和你的按钮对象(pb)的变量。

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

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

我觉得这就是你想要的。希望我理解你的问题没错 :)

67

我的第一个建议是使用Qt Designer来创建你的图形用户界面(GUI)。自己手动输入代码很麻烦,耗时又容易出错,而Qt Designer可以帮你减少这些问题。

这里有一些PyQt教程,可以帮助你入门。列表中的第一个教程是你应该开始的地方。

想要了解特定类有哪些方法,可以参考PyQt4类参考。在这里,你可以查找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_()

撰写回答