Python Pyqt:无法在终端窗口中的lineedit和print命令中显示数据

时间:2012-09-14 10:10:07

标签: python pyqt

我试图在Lineedit中显示循环数据,但它没有更新。即使是打印命令也不打印终端上的数据,直到我按下除lineedit中的返回以外的任何键。看看程序并建议我做出改变:

import sys
import time
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MyFrame(QWidget):
def __init__(self):
    QWidget.__init__(self)

    self.le = QLineEdit(self)
    self.le.setGeometry(200,200,75,35)

    i=0
    self.le.setText(str(i))

    self.connect(self.le, SIGNAL("textChanged(QString)"),self.updatedvalue)

def updatedvalue(self):

    for i in range(1,5):
        self.le.setText(str(i))
        print(i)
        time.sleep(1)

app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()

1 个答案:

答案 0 :(得分:0)

更新QApplication.instance.processEvents()文字后,您需要致电QLineEdit以强制更新,否则在最终号码之前您将看不到任何内容。< / p>

您还需要将textChanged()信号更改为textEdited()。使用textChanged()您的updatedvalue()功能会在调用setText()后第一次调用时再次调用,因为您正在更新QLineEdit&#39}文本。如果您以编程方式更新文本,则不会触发textEdited()信号。

import sys
import time
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MyFrame(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.le = QLineEdit(self)
        self.le.setGeometry(200,200,75,35)

        i = 0
        self.le.setText(str(i))

        self.connect(self.le, SIGNAL("textEdited(QString)"),self.updatedvalue)

    def updatedvalue(self):
        for i in range(1,5):
            self.le.setText(str(i))
            QApplication.instance().processEvents()
            print(i)
            time.sleep(1)

app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()

正如Bob所说,使用QTimer会好得多。