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

2024-10-06 12:48:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一个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)

我使用“text changed”信号的原因与类documentation所说的有关,即“当以编程方式更改文本时(例如,通过调用setText())也会发出此信号。”

但是这不起作用,因为print语句没有执行。有人能帮我吗?


Tags: 文本importselfsignaldefconnectsysqtgui
1条回答
网友
1楼 · 发布于 2024-10-06 12:48:54

问题是信号是而不是textChanged(bool),因为它接受一个字符串参数,所以它可能是:textChanged(str)

为了避免这种错误,您应该使用new-style syntax来连接信号:

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

这种语法有几个优点:

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

相关问题 更多 >