50

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

当用户单击名称为“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

4 回答 4

58

我的第一个建议是使用 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_()
于 2010-06-10T19:59:33.737 回答
2

对象名称不是很重要。您应该关注的是存储 lineedit 对象(le)和按钮对象(pb)的变量

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

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

我想这就是你想要的。我希望我正确地回答了你的问题:)

于 2010-06-11T06:46:29.810 回答
0

简短而普遍的答案是:

self.input = QLineEdit()
your_text = self.input.text()
于 2021-10-23T12:52:53.603 回答
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_()
于 2020-08-26T07:31:30.130 回答