当QLineEdit文本被改变时执行操作
我写了以下代码,这段代码里有一个可以通过点击“添加文本”按钮来编辑的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”这个信号是因为文档中提到,“这个信号在文本被程序改变时也会被触发,比如通过调用setText()。”
但是这并没有生效,因为打印语句没有被执行。有没有人能帮我解决这个问题?
1 个回答
41
问题在于这个信号并不是 textChanged(bool),因为它需要一个字符串作为参数,所以应该是 textChanged(str)
。
为了避免这种错误,你应该使用新风格的语法来连接信号:
self.MyInput.textChanged.connect(self.doSomething)
# or:
self.MyInput.textChanged[str].connect(self.doSomething)
这种语法有几个好处:
- 更清晰
- 更简洁,易于阅读
- 提供了更多的错误检查,因为如果信号不存在,它会抛出错误。而旧的语法不会抛出错误,但信号也没有连接,这就导致了你看到的那种行为。