我正在尝试实现一个功能。我的代码如下。
当用户点击名为“connect”的按钮时,我希望在字符串中使用对象名称'host'的lineedit中的文本说'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!
答案 0 :(得分:35)
我的第一个建议是使用Designer来创建GUI。自己打字很糟糕,花费更多时间,你肯定会比设计师犯更多错误。
以下是一些帮助您走上正确轨道的PyQt tutorials。列表中的第一个是你应该开始的地方。
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_()
答案 1 :(得分:0)
对象名称不是很重要。 您应该关注的是存储lineedit对象(le)和按钮对象(pb)的变量
QObject(self.pb, SIGNAL("clicked()"), self.button_clicked) def button_clicked(self): self.le.setText("shost")
我认为这就是你想要的。 我希望我能正确地回答你的问题:)
答案 2 :(得分:0)
在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_()