我有一个Python控制台程序,我想转移到GUI。 我想过使用PyQt 5,但我对替代品持开放态度。
简化的控制台代码如下所示:
while True:
data = obtain_data_from_device(source)
print(datatotext(data))
根据我的理解,GUI代码的工作方式不同。 但是如何使用gets_data_from_device函数连续更新PyQt中的文本框,该函数可能需要0.5到30秒的任何时间?
while循环不能这样做,因为它搞砸了GUI,计时器不起作用,因为持续时间是可变的。
我很感激任何提示。
答案 0 :(得分:1)
一个选项,因为您已经有一个写入STDOUT的工作程序,就是让GUI程序使用QProcess
作为子进程运行控制台程序。
孩子将在GUI程序的控制下异步运行,GUI程序将通过信号接收孩子的输出,即非阻塞
答案 1 :(得分:0)
您可以尝试这样的事情:
import sys
import random
import time
import string
from PyQt5 import QtWidgets, QtCore
def obtain_data_from_device(source):
time.sleep(0.001)
data = ''.join(random.choice(string.ascii_uppercase + string.digits)
for _ in range(len(source)))
return data
class Main(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.init_ui()
def init_ui(self):
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.time)
self.timer.start(0)
self.lcd = QtWidgets.QLineEdit(self)
self.lcd.setText(
obtain_data_from_device("whatever data you're capturing"))
self.setCentralWidget(self.lcd)
self.setGeometry(300, 300, 250, 100)
self.setWindowTitle("Displaying capture data from device")
def time(self):
self.lcd.setText(
obtain_data_from_device("whatever data you're capturing"))
def main():
app = QtWidgets.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
您只需要替换现有的obtain_data_from_device。