欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/
一、问题描述
有时候我们需要对函数进行封装,也就是创建GUI界面,但是封装过程中,可能会调用其他脚本中的函数,因此如何实现不同脚本之间函数的日志回传并在GUI界面中实时显示其他脚本程序的执行过程呢,本文给出该解决方案,希望对您的工作有所帮助。
二、示例代码
话不多说,下面笔者给出一个简单的运行代码,来说明不同脚本之间如何实现日志实时回传并在GUI界面的显示原理,读者可以根据个人需求进行更改。下面给出简单的说明:
script1.py
:该脚本定义一个简单的GUI界面
具体代码如下:
import sys
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTextEdit
class ImageProcess(QWidget):
def __init__(self):
super().__init__()
self.log_area = None
self.start_button = None
self.initUI()
def initUI(self):
self.setWindowTitle('实时日志显示')
self.setGeometry(100, 100, 400, 300)
# 创建布局
layout = QVBoxLayout()
# 创建日志显示区域
self.log_area = QTextEdit()
self.log_area.setReadOnly(True)
# 创建按钮
self.start_button = QPushButton('运行IQA函数')
self.start_button.clicked.connect(self.start_iqa_function)
layout.addWidget(self.start_button)
layout.addWidget(self.log_area)
self.setLayout(layout)
def start_iqa_function(self):
# 启动线程运行IQA函数
self.iqa_thread = threading.Thread(target=self.run_iqa)
self.iqa_thread.start()
def run_iqa(self):
import script2 # 倒入脚本2中定义的IQA函数
script2.func_iqa(self.append_log) # 传递日志更新函数
def append_log(self, message):
# 在日志显示区域添加日志信息
self.log_area.append(message)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ImageProcess()
ex.show()
sys.exit(app.exec_())
script2.py
:该脚本定义一个简单的程序,用于脚本1中的函数调用;
具体代码如下:
import time
def func_iqa(log_callback):
# 模拟IQA处理过程
for i in range(10):
time.sleep(1)
log_message = f'日志条目 {i + 1}: IQA处理完成。\n'
log_callback(log_message) # 调用回调函数更新日志
运行script1.py
,可以出现我们定义的简单GUI界面,具体如下:
点击运行IQA函数
按钮,会启动scipt2.py
中定义的func_iqa
函数,运行后func_iqa
中的处理日志会回传到GU I界面下的日志显示输出区域进行实时展示,具体效果如下:
具体效果,笔者可复制代码,自行测试,后面只需根据个人需求进行自定义更改即可。