我编写了以下带有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语句。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:15)
问题是信号不 textChanged(bool)
,因为它需要一个字符串参数,所以它可能应该是:textChanged(str)
。
为避免此类错误,您应使用new-style syntax连接信号:
self.MyInput.textChanged.connect(self.doSomething)
# or:
self.MyInput.textChanged[str].connect(self.doSomething)
这种语法有几个优点: