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

时间:2015-03-24 07:00:30

标签: python module pyqt4 real-time

我希望显示如下对话框:

测试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"

1 个答案:

答案 0 :(得分:0)

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

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类中有一个update_gui方法,可以由其他模块直接调用,或者是一个侦听其他模块发送的信号的插槽。