我试图在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_()
答案 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会好得多。