【问题标题】:How to get text in QlineEdit when QpushButton is pressed in a string?在字符串中按下 QpushButton 时如何在 QlineEdit 中获取文本?
【发布时间】:2011-03-02 07:29:35
【问题描述】:

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

当用户单击名称为“连接”的按钮时,我想在字符串中获取对象名称为“主机”的文本,例如“主机”。我怎样才能做到这一点?我尝试过,但失败了。如何实现这个功能?

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!

【问题讨论】:

    标签: python pyqt5 pyqt4 qlineedit


    【解决方案1】:

    我的第一个建议是使用 Qt Designer 来创建您的 GUI。自己打字很糟糕,需要更多时间,而且你肯定会比 Qt Designer 犯更多的错误。

    这里有一些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_()
    

    【讨论】:

    • 我收到了这个错误! AttributeError: 'Form' 对象没有属性 'le'
    • 您需要在 __init__ 函数中将其命名为 self.le。在Form 类中使用它的任何地方都应该是self.le
    • 我没听懂你。抱歉,我刚刚开始使用这些...我使用了您提供的代码,但出现了错误。我认为在其中,它已经是 self.le
    • 我在运行上述代码时没有收到错误消息。我用的是Python 2.6,你用的是什么版本?
    • shost = self.le.text() 可能会给出 QString 输出。使用 str() 进行转换以获得有意义的文本。
    【解决方案2】:

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

    QObject(self.pb, SIGNAL("clicked()"), self.button_clicked) def button_clicked(self): self.le.setText("shost")

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        简短而普遍的答案是:

        self.input = QLineEdit()
        your_text = self.input.text()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多