[英]How to translate Python console program (including while true loop) to PyQt?
我有一个要转移到GUI的Python控制台程序。 我曾考虑使用PyQt 5,但我愿意接受其他选择。
简化的控制台代码如下所示:
while True:
data = obtain_data_from_device(source)
print(datatotext(data))
现在,据我了解,GUI代码的工作原理有所不同。 但是,如何使用get_data_from_device函数连续更新PyQt中的文本框,这可能需要0.5到30秒的时间?
while循环无法做到,因为它搞砸了GUI,由于持续时间是可变的,所以计时器不起作用。
我将不胜感激。
一种选择是,因为您已经具有可写入STDOUT的工作程序,所以可以让GUI程序使用QProcess
作为子进程运行控制台程序。
子进程将在GUI程序的控制下异步运行,并且GUI程序将通过信号(即非阻塞)接收子进程的输出
您可以尝试这样的事情:
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()
您只需要用自己的设备替换现有的gain_data_from_device。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.