pyqt4 QLineEdit实时输出使用其他py模块

pyqt4 QLineEdit realtime output using other py module

我想显示这样的对话框:

测试 0

测试 1

测试 2

测试 3

.......

测试成功

我试过.....但它不起作用!

它只显示成功....

有没有办法在执行过程中实时输出?

这是示例代码

test.py

# -*- coding: utf-8 -*-

import sys
import test2
from PyQt4 import QtGui

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):      
        self.btn = QtGui.QPushButton('Dialog', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)

        self.le = QtGui.QLineEdit(self)
        self.le.move(130, 22)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('test')
        self.show()

    def showDialog(self):
        self.le.setText(test2.main("10",self.le))

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

test2.py

import time

def main(num,text_edit_box):
    for i in range(int(num)):
        text_edit_box.setText(str(i))
        print i
        time.sleep(1)
    return "success"

是的,您可以使用 processEvents 来做到这一点。通常当代码连续运行时(例如在 test2.main 中的 for 循环中)程序永远不会被告知更新,所以它不会。 processEvents 是强制更新 GUI 的简单方法。它必须在 QApplication class 上调用,因此我包含了对传递给 test2.main.

的那个 (app) 的引用

test.py

import sys
import test2
from PyQt4 import QtGui

class Example(QtGui.QWidget):
    def __init__(self, app):
        self.app = app
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):      
        self.btn = QtGui.QPushButton('Dialog', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)

        self.le = QtGui.QLineEdit(self)
        self.le.move(130, 22)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('test')
        self.show()

    def showDialog(self):
        self.le.setText(test2.main("10",self.le, self.app))

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example(app)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

test2.py

import time

def main(num,text_edit_box, app):
    for i in range(int(num)):
        text_edit_box.setText(str(i))
        print i
        time.sleep(.1)
        app.processEvents()
    return "success"

根据您的尝试,这可能不是最好的方法,但它是使您的代码正常工作的最简单方法。

重绘 GUI 的一个更好的总体方法可能是在 GUI class 中有一个 update_gui 方法,它可以被其他模块直接调用,或者一个监听发送信号的插槽由其他模块。