更改QLineEdit文本时(以编程方式)执行操作

时间:2014-03-20 11:28:41

标签: python pyqt

我编写了以下带有QLineEdit的代码片段,可以通过按下按钮"添加文本"来编辑。

import sys
import os
from PyQt4 import QtGui
from PyQt4 import *

class SmallGUI(QtGui.QMainWindow):
    def __init__(self):
        super(SmallGUI,self).__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,300,300)
        self.setWindowTitle('Sample')

        #One input
        self.MyInput = QtGui.QLineEdit(self)
        self.MyInput.setGeometry(88,25,110,20)
        ###############

        QtCore.QObject.connect(self.MyInput,QtCore.SIGNAL("textChanged(bool)"),self.doSomething)

        #Add Text
        self.MyButton = QtGui.QPushButton(self)
        self.MyButton.setGeometry(QtCore.QRect(88,65,110,20))
        self.MyButton.setText('Add Text')
        ###############

        QtCore.QObject.connect(self.MyButton,QtCore.SIGNAL("clicked(bool)"),self.addText)

        self.show()

    def addText(self):
        self.MyInput.setText('write something')

    def doSomething(self):
        print "I'm doing something"

def main():
    app = QtGui.QApplication(sys.argv)
    sampleForm = SmallGUI()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我想要做的是在以编程方式更改QLineEdit的文本时执行操作,即单击按钮'添加文本',执行以下操作:

QtCore.QObject.connect(self.MyInput,QtCore.SIGNAL("textChanged(bool)"),self.doSomething)

我之所以使用信号" textChanged"与documentation类所说的相关,即"当以编程方式更改文本时,也会发出此信号,例如,通过调用setText()。"

但是这不起作用导致不执行print语句。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:15)

问题是信号 textChanged(bool),因为它需要一个字符串参数,所以它可能应该是:textChanged(str)

为避免此类错误,您应使用new-style syntax连接信号:

self.MyInput.textChanged.connect(self.doSomething)
# or:
self.MyInput.textChanged[str].connect(self.doSomething)

这种语法有几个优点:

  • 更清楚
  • 它不那么冗长,更具可读性
  • 它提供了更多的错误检查,因为如果信号不存在则会引发错误。使用旧语法不会引发错误,但信号也未连接,结果就是您所看到的行为。