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
方法,它可以被其他模块直接调用,或者一个监听发送信号的插槽由其他模块。
我想显示这样的对话框:
测试 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
方法,它可以被其他模块直接调用,或者一个监听发送信号的插槽由其他模块。