37,720
社区成员
发帖
与我相关
我的任务
分享
from PySide2.QtCore import QThread
from PySide2.QtCore import QObject
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QFileDialog
# 信号槽
from PySide2.QtCore import Signal
from PySide2.QtCore import Slot
from process_package.process_data_module import TrackDataProcessing
class FileManager(QObject):
def __init__(self):
super(FileManager, self).__init__()
self.__init_instance()
self.__init_connections()
def __del__(self):
# print('delete')
self.__split_data_thread.quit()
self.__split_data_thread.wait()
def split_data_to_new_file(self):
"""
打开对话框选择要拆分数据的文档,将文档名列表传给后端处理
"""
# 获取打开的所有文件名列表
files_in_list = QFileDialog.getOpenFileNames()[0]
# 打开文件数不为0,将文件名列表传给后端处理
if 0 != len(files_in_list):
# 判断子线程状态,如果没有启动,则启动子线程
self.__start_sub_thread(self.__split_data_thread, self.__track_processing)
self.si_file_name_with_path.emit(files_in_list)
@Slot()
def __close_application(self):
"""
退出程序
"""
QApplication.closeAllWindows()
def __init_instance(self):
"""
初始化对象变量
"""
self.__track_processing = TrackDataProcessing()
self.__split_data_thread = QThread()
def __init_connections(self):
"""
初始化信号槽
"""
# 信号槽新写法,推荐
# 向槽函数传递打开文件名的列表
self.si_close_application.connect(self.__close_application)
def __start_sub_thread(self, thread: QThread, process: QObject):
"""
启动将变量迁入子线程,启动子线程
:param thread: 子线程
:param process: 迁入子线程的变量
"""
self.si_file_name_with_path.connect(self.__track_processing.split_data_to_different_file)
if not thread.isRunning():
process.moveToThread(thread)
thread.finished.connect(process.deleteLater)
self.si_file_name_with_path.connect(self.__track_processing.split_data_to_different_file)
thread.start()
# 打开的文件名及文件路径
si_file_name_with_path = Signal(list)
si_close_application = Signal()