繁体   English   中英

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循环中test2.main ),程序永远不会被告知要更新,所以它不会更新。 processEvents是强制进行GUI更新的简单方法。 必须在QApplication类上调用它,因此我包含了对传递给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类中具有update_gui方法,该方法可以由其他模块直接调用,也可以由插槽侦听其他模块发送的信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM