如何在QpushButton被按下时获取QlineEdit中的文本字符串?
我正在尝试实现一个功能。下面是我的代码。
我想在用户点击名为 '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_()