0

Lineeditでループデータを表示しようとしていますが、更新されていません。printコマンドでも、lineeditでreturn以外のキーを押すまで、端末にデータを印刷しません。プログラムを見て、変更を提案してください。

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_()
4

1 に答える 1

0

QApplication.instance.processEvents()のテキストを更新した後、強制的に更新するには電話をかける必要がありますQLineEdit。そうしないと、最終的な番号まで何も表示されません。

textChanged()また、信号をに変更する必要がありますtextEdited()。のテキストを更新しているため、一度呼び出されると、ループの最初のパスで関数の使用が再度呼び出されtextChanged()ます。プログラムでテキストを更新した場合、シグナルはトリガーされません。updatedvalue()setText()QLineEdittextEdited()

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_()

ボブが述べたように、QTimerを使用する方がはるかに優れています。

于 2012-09-14T15:29:46.890 に答える