import shutil
from PySide2.QtWidgets import QApplication, QMessageBox, QTableWidgetItem
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QThread
import configparser as cp
import os
import time
from threading import Thread
class WKManagement_system_UI():
def __init__(self):
# 初始化加载主界面
self.ui = QUiLoader().load('main_window---1.ui')
# 初始化类属性
self.config = cp.ConfigParser()
self.read_result_data = None
# 加载按钮触发事件
self.ui.btn_start_measure.clicked.connect(self.start_measure)
# 初始化日志写入功能
self.write_log = self.input_log('程序初始化完成!')
# 程序开始测量,负责代码组织功能
def start_measure(self):
self.send_request_ini()
read_result_thread = Thread(target=self.read_result)
read_result_thread.start()
read_result_thread.join()
self.show_result_data(results=self.read_result_data)
print('主线程执行完成!', os.getpid())
def send_request_ini(self):
shutil.copyfile('data/request.ini', 'D:/message/request.ini') # 将request.ini文件进行复制,如果要调整,先做调整在复制
self.input_log('开始文件生成成功!')
def read_result(self):
result_path = 'D:/message/Result.ini'
while True:
if os.path.exists(result_path):
time.sleep(0.1)
self.config.read(result_path, encoding='GBK')
length = self.config.get('测量项目', 'length')
width = self.config.get('测量项目', 'width')
height = self.config.get('测量项目', 'height')
wheelbase = self.config.get('测量项目', 'wheelbase')
self.read_result_data = (length, width, height, wheelbase)
print('子线程执行完成!', os.getpid(), os.getppid())
return self.read_result_data
def show_result_data(self, results):
self.ui.tableWidget.setItem(1, 0, QTableWidgetItem(results[0]))
self.ui.tableWidget.setItem(1, 1, QTableWidgetItem(results[1]))
self.ui.tableWidget.setItem(1, 2, QTableWidgetItem(results[2]))
self.ui.tableWidget.setItem(1, 3, QTableWidgetItem(results[3]))
def input_log(self, info):
if os.path.exists(f"data/{time.strftime('%Y-%m-%d', time.localtime())}_info.log"):
with open(f"data/{time.strftime('%Y-%m-%d', time.localtime())}_info.log", 'a') as log_file:
log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}: {info}\n")
else:
open(f"data/{time.strftime('%Y-%m-%d', time.localtime())}_info.log", 'w')
with open(f"data/{time.strftime('%Y-%m-%d', time.localtime())}_info.log", 'a') as log_file:
log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}: {info}\n")
if __name__ == '__main__':
app = QApplication([])
main_wk_ui = WKManagement_system_UI()
main_wk_ui.ui.show()
app.exec_()
你将执行时间较长的代码用多线程执行就行了
在PySide2中 是不支持 Python 的多线程类 threading,要用到QT特有的线程类QThread;
看代码中只用到了 read_result_thread = Thread(target=self.read_result),尝试使用一下QThread