# 标准库 import traceback, os # 三方库 import configparser from PyQt5.QtCore import QObject, pyqtSignal # 自己写的库 from library.dir_manager import DirManager # class ConfigFile(): # def __init__(self): # self.base_dir = get_path() # # self.log_dir = self.base_dir + '//log' # self.create_directory(self.log_dir) # # self.corning_config_file = self.log_dir + '//corning_config.ini' # # self.read_config_file() # # self.signals = WorkerSignals() # self.signals.image_signal.connect(self.image_record_param_changed) # self.signals.spectral_signal.connect(self.spectral_record_param_changed) # # # # 查看是否存在保存光谱和影像文件的目录,如果没有就创建 # def create_directory(self, directory): # if not os.path.exists(directory): # print('创建文件夹:', directory) # os.makedirs(directory) # # # 读取配置文件,如果没有就创建 # def read_config_file(self): # if os.path.exists(self.corning_config_file): # ''' # 如果存在配置文件,就从配置文件中读取软件配置信息 # ''' # print('配置文件存在!') # # config = configparser.ConfigParser() # config.read(self.corning_config_file) # # self.image_dir = config.get('image_record_param', 'image_dir') # self.create_directory(self.image_dir) # self.default_image_name = config.get('image_record_param', 'default_image_name') # self.framerate = int(config.get('image_record_param', 'framerate')) # self.exposure_time = int(config.get('image_record_param', 'exposure_time')) # self.gain = int(float(config.get('image_record_param', 'gain'))) # self.frame_number = int(config.get('image_record_param', 'frame_number')) # # self.spectral_dir = config.get('spectral_record_param', 'spectral_dir') # self.create_directory(self.spectral_dir) # self.default_spectral_name = config.get('spectral_record_param', 'default_spectral_name') # # self.binning = int(config.get('bin', 'binning')) # if self.binning == 1: # self.start_column = int(config.get('bin', 'start_column_binning_1')) # self.end_column = int(config.get('bin', 'end_column_binning_1')) # self.start_row = int(config.get('bin', 'start_row_binning_1')) # self.end_row = int(config.get('bin', 'end_row_binning_1')) # elif self.binning == 2: # self.start_column = int(config.get('bin', 'start_column_binning_2')) # self.end_column = int(config.get('bin', 'end_column_binning_2')) # self.start_row = int(config.get('bin', 'start_row_binning_2')) # self.end_row = int(config.get('bin', 'end_row_binning_2')) # # # print(self.default_dir, self.binning, self.start_column, self.end_column, self.start_row, self.end_row) # # else: # ''' # 1、如果不存在配置文件,就建立配置文件; # 2、并且手动创建配置变量 # ''' # config = configparser.ConfigParser() # # # config.add_section('effective_window') # # startRow = 339 # # endRow = 639 # # startColumn = 285 # # endColumn = 1649 # # # config.add_section('bin') # config.set('bin', 'binning', '1') # # config.set('bin', 'start_column_binning_1', '12') # config.set('bin', 'end_column_binning_1', '1376') # config.set('bin', 'start_row_binning_1', '1') # config.set('bin', 'end_row_binning_1', '301') # # config.set('bin', 'start_column_binning_2', '13') # config.set('bin', 'end_column_binning_2', '695') # config.set('bin', 'start_row_binning_2', '1') # config.set('bin', 'end_row_binning_2', '150') # # config.add_section('image_record_param') # config.set('image_record_param', 'image_dir', self.base_dir + '/image') # config.set('image_record_param', 'default_image_name', 'testimage') # config.set('image_record_param', 'framerate', '20') # config.set('image_record_param', 'exposure_time', '500') # config.set('image_record_param', 'gain', '0') # config.set('image_record_param', 'frame_number', '20') # # config.add_section('spectral_record_param') # config.set('spectral_record_param', 'spectral_dir', self.base_dir + '/spectral') # config.set('spectral_record_param', 'default_spectral_name', 'testspectral') # # config.set('spectral_record_param', 'start_column_binning_1', '12') # # with open(self.corning_config_file, mode='w') as f: # config.write(f) # print('创建配置文件成功!') # # # 如果没有配置文件,就手动创建配置变量 # self.image_dir = self.base_dir + '/image' # self.create_directory(self.image_dir) # self.default_image_name = 'testimage' # self.framerate = 20 # self.exposure_time = 500 # self.gain = 0 # self.frame_number = 20 # # self.spectral_dir = self.base_dir + '/spectral' # self.create_directory(self.spectral_dir) # self.default_spectral_name = 'testspectral' # # self.binning = int(config.get('bin', 'binning')) # self.start_column = int(config.get('bin', 'start_column_binning_1')) # self.end_column = int(config.get('bin', 'end_column_binning_1')) # self.start_row = int(config.get('bin', 'start_row_binning_1')) # self.end_row = int(config.get('bin', 'end_row_binning_1')) # # # self.start_column = 12 # # self.end_column = 1376 # # self.start_row = 1 # # self.end_row = 300 # # def image_record_param_changed(self, dictionary): # ''' # :param dictionary: {'image_dir':值, 'image_record_param': 值} # :return: # ''' # try: # # print('接收的参数个数:', len(dictionary.keys())) # # config = configparser.ConfigParser() # config.read(self.corning_config_file) # # for key in dictionary.keys(): # if key == 'image_dir': # self.image_dir = dictionary[key] # config.set('image_record_param', key, dictionary[key]) # if key == 'default_image_name': # self.default_image_name = dictionary[key] # config.set('image_record_param', key, dictionary[key]) # if key == 'framerate': # self.framerate = dictionary[key] # config.set('image_record_param', key, str(dictionary[key])) # if key == 'exposure_time': # self.exposure_time = dictionary[key] # config.set('image_record_param', key, str(dictionary[key])) # if key == 'gain': # self.gain = dictionary[key] # config.set('image_record_param', key, str(dictionary[key])) # if key == 'frame_number': # self.frame_number = dictionary[key] # config.set('image_record_param', key, str(dictionary[key])) # except: # traceback.print_exc() # # with open(self.corning_config_file, 'w') as f: # config.write(f) # # def spectral_record_param_changed(self, dictionary): # ''' # :param dictionary: {'image_dir':值, 'image_record_param': 值} # :return: # ''' # print(len(dictionary.keys())) # # config = configparser.ConfigParser() # config.read(self.corning_config_file) # # try: # for key in dictionary.keys(): # if key == 'spectral_dir': # self.spectral_dir = dictionary[key] # config.set('spectral_record_param', key, dictionary[key]) # if key == 'default_spectral_name': # self.default_spectral_name = dictionary[key] # config.set('spectral_record_param', key, dictionary[key]) # except: # traceback.print_exc() # # with open(self.corning_config_file, 'w') as f: # config.write(f) class ConfigFile(QObject, DirManager): # 信号必须定义为类属性,不能放在__init__方法里 image_signal = pyqtSignal(dict) spectral_signal = pyqtSignal(dict) def __init__(self): ''' 配置文件读取和写入类,采集数据需要的帧率、曝光、帧数、文件名等等都由此类从文件中读取并保存在此类中, ''' super(ConfigFile, self).__init__() self.corning_config_file = self.log_dir + '//corning_config.ini' self.read_config_file() self.image_signal.connect(self.image_record_param_changed) self.spectral_signal.connect(self.spectral_record_param_changed) # 读取配置文件,如果没有就创建 def read_config_file(self): if os.path.exists(self.corning_config_file): ''' 如果存在配置文件,就从配置文件中读取软件配置信息 ''' print('配置文件存在!') config = configparser.ConfigParser() config.read(self.corning_config_file) # self.image_dir = config.get('image_record_param', 'image_dir') # self.create_directory(self.image_dir) # self.default_image_name = config.get('image_record_param', 'default_image_name') # self.framerate = int(config.get('image_record_param', 'framerate')) # self.exposure_time = int(float(config.get('image_record_param', 'exposure_time'))) # self.gain = int(float(config.get('image_record_param', 'gain'))) # self.frame_number = int(config.get('image_record_param', 'frame_number')) # self.arcus_speed = int(config.get('image_record_param', 'arcus_speed')) # # self.spectral_dir = config.get('spectral_record_param', 'spectral_dir') # self.create_directory(self.spectral_dir) # self.default_spectral_name = config.get('spectral_record_param', 'default_spectral_name') # self.spectral_number = int(config.get('spectral_record_param', 'spectral_number')) # self.framenumber_average = int(config.get('spectral_record_param', 'framenumber_average')) # self.exposure_time_spectral = int(config.get('spectral_record_param', 'exposure_time_spectral')) # # self.binning = int(config.get('bin', 'binning')) # if self.binning == 1: # self.start_column = int(config.get('bin', 'start_column_binning_1')) # self.end_column = int(config.get('bin', 'end_column_binning_1')) # self.start_row = int(config.get('bin', 'start_row_binning_1')) # self.end_row = int(config.get('bin', 'end_row_binning_1')) # elif self.binning == 2: # self.start_column = int(config.get('bin', 'start_column_binning_2')) # self.end_column = int(config.get('bin', 'end_column_binning_2')) # self.start_row = int(config.get('bin', 'start_row_binning_2')) # self.end_row = int(config.get('bin', 'end_row_binning_2')) # # # print(self.default_dir, self.binning, self.start_column, self.end_column, self.start_row, self.end_row) else: ''' 1、如果不存在配置文件,就建立配置文件; 2、并且手动创建配置变量 ''' config = configparser.ConfigParser() config.add_section('bin') config.set('bin', 'binning', '1') # # Serial number = 008 # config.set('bin', 'start_column_binning_1', '12') # config.set('bin', 'end_column_binning_1', '1376') # config.set('bin', 'start_row_binning_1', '2') # config.set('bin', 'end_row_binning_1', '302') # # config.set('bin', 'start_column_binning_2', '13') # config.set('bin', 'end_column_binning_2', '695') # config.set('bin', 'start_row_binning_2', '0') # config.set('bin', 'end_row_binning_2', '150') # # Serial number = 0073 # config.set('bin', 'start_column_binning_1', '12') # config.set('bin', 'end_column_binning_1', '1376') # config.set('bin', 'start_row_binning_1', '1') # config.set('bin', 'end_row_binning_1', '301') # # config.set('bin', 'start_column_binning_2', '13') # config.set('bin', 'end_column_binning_2', '695') # config.set('bin', 'start_row_binning_2', '0') # config.set('bin', 'end_row_binning_2', '150') # # Serial number = 0095 # config.set('bin', 'start_column_binning_1', '12') # config.set('bin', 'end_column_binning_1', '1376') # config.set('bin', 'start_row_binning_1', '1') # config.set('bin', 'end_row_binning_1', '301') # # config.set('bin', 'start_column_binning_2', '13') # config.set('bin', 'end_column_binning_2', '695') # config.set('bin', 'start_row_binning_2', '0') # config.set('bin', 'end_row_binning_2', '150') # Serial number = 0031 config.set('bin', 'start_column_binning_1', '12') config.set('bin', 'end_column_binning_1', '1376') config.set('bin', 'start_row_binning_1', '1') config.set('bin', 'end_row_binning_1', '301') config.set('bin', 'start_column_binning_2', '13') config.set('bin', 'end_column_binning_2', '695') config.set('bin', 'start_row_binning_2', '1') config.set('bin', 'end_row_binning_2', '151') # # Serial number = 0099 # config.set('bin', 'start_column_binning_1', '12') # config.set('bin', 'end_column_binning_1', '1376') # config.set('bin', 'start_row_binning_1', '1') # config.set('bin', 'end_row_binning_1', '301') # # config.set('bin', 'start_column_binning_2', '13') # config.set('bin', 'end_column_binning_2', '695') # config.set('bin', 'start_row_binning_2', '1') # config.set('bin', 'end_row_binning_2', '151') config.add_section('effective_window') config.set('effective_window', 'width_binning_1', '1392') config.set('effective_window', 'offsetX_binning_1', '272') config.set('effective_window', 'height_binning_1', '302') config.set('effective_window', 'offsetY_binning_1', '364') config.set('effective_window', 'width_binning_2', '696') config.set('effective_window', 'offsetX_binning_2', '128') config.set('effective_window', 'height_binning_2', '151') config.set('effective_window', 'offsetY_binning_2', '182') config.add_section('calibration_file') config.set('calibration_file', 'cal_file_name_image_bining_1', 'lens_bin1_gain_SN0073') config.set('calibration_file', 'cal_file_name_image_bining_2', 'lens_bin2_gain_SN0073') config.set('calibration_file', 'cal_file_it_image_bining_1', '6969') config.set('calibration_file', 'cal_file_it_image_bining_2', '1628') config.set('calibration_file', 'cal_file_name_spectral_bining_1', 'optical_fiber_bin1_gain_SN0073') config.set('calibration_file', 'cal_file_it_spectrl_bining_1', '42300') config.add_section('wavelength_file_name') config.set('wavelength_file_name', 'file_name', 'wavelength0073.txt') config.add_section('image_record_param') config.set('image_record_param', 'image_dir', self.base_dir + '/image') config.set('image_record_param', 'default_image_name', 'testimage') config.set('image_record_param', 'framerate', '20') config.set('image_record_param', 'exposure_time', '500') config.set('image_record_param', 'gain', '0') config.set('image_record_param', 'frame_number', '20') config.set('image_record_param', 'arcus_speed', '1000') config.add_section('spectral_record_param') config.set('spectral_record_param', 'spectral_dir', self.base_dir + '/spectral') config.set('spectral_record_param', 'default_spectral_name', 'testspectral') config.set('spectral_record_param', 'spectral_number', '10') config.set('spectral_record_param', 'framenumber_average', '10') config.set('spectral_record_param', 'exposure_time_spectral', '1000') # config.set('spectral_record_param', 'start_column_binning_1', '12') with open(self.corning_config_file, mode='w') as f: config.write(f)# 如果没有配置文件,就手动创建配置变量 print('创建配置文件成功!') # 读取配置文件中的参数 self.binning = int(config.get('bin', 'binning')) print('读取配置文件中参数:', self.binning) if self.binning == 1: self.effective_window_width = int(config.get('effective_window', 'width_binning_1')) self.effective_window_offsetx = int(config.get('effective_window', 'offsetx_binning_1')) self.effective_window_height = int(config.get('effective_window', 'height_binning_1')) self.effective_window_offsety = int(config.get('effective_window', 'offsety_binning_1')) self.start_column = int(config.get('bin', 'start_column_binning_1')) self.end_column = int(config.get('bin', 'end_column_binning_1')) self.start_row = int(config.get('bin', 'start_row_binning_1')) self.end_row = int(config.get('bin', 'end_row_binning_1')) self.calibration_file_name_image=config.get('calibration_file', 'cal_file_name_image_bining_1') self.calibration_file_it_image = int(config.get('calibration_file', 'cal_file_it_image_bining_1')) self.calibration_file_name_spectral = config.get('calibration_file', 'cal_file_name_spectral_bining_1') self.calibration_file_it_spectral = int(config.get('calibration_file', 'cal_file_it_spectrl_bining_1')) elif self.binning == 2: self.effective_window_width = int(config.get('effective_window', 'width_binning_2')) self.effective_window_offsetx = int(config.get('effective_window', 'offsetx_binning_2')) self.effective_window_height = int(config.get('effective_window', 'height_binning_2')) self.effective_window_offsety = int(config.get('effective_window', 'offsety_binning_2')) self.start_column = int(config.get('bin', 'start_column_binning_2')) self.end_column = int(config.get('bin', 'end_column_binning_2')) self.start_row = int(config.get('bin', 'start_row_binning_2')) self.end_row = int(config.get('bin', 'end_row_binning_2')) self.calibration_file_name_image = config.get('calibration_file', 'cal_file_name_image_bining_2') self.calibration_file_it_image = int(config.get('calibration_file', 'cal_file_it_image_bining_2')) self.wavelength_file_name = config.get('wavelength_file_name', 'file_name') self.image_dir = config.get('image_record_param', 'image_dir') self.create_directory(self.image_dir) self.default_image_name = config.get('image_record_param', 'default_image_name') self.framerate = int(float(config.get('image_record_param', 'framerate'))) self.exposure_time = int(float(config.get('image_record_param', 'exposure_time'))) self.gain = int(float(config.get('image_record_param', 'gain'))) self.frame_number = int(float(config.get('image_record_param', 'frame_number'))) self.arcus_speed = int(float(config.get('image_record_param', 'arcus_speed'))) self.spectral_dir = config.get('spectral_record_param', 'spectral_dir') self.create_directory(self.spectral_dir) self.default_spectral_name = config.get('spectral_record_param', 'default_spectral_name') self.spectral_number = int(float(config.get('spectral_record_param', 'spectral_number'))) self.framenumber_average = int(float(config.get('spectral_record_param', 'framenumber_average'))) self.exposure_time_spectral = int(float(config.get('spectral_record_param', 'exposure_time_spectral'))) # self.start_column = 12 # self.end_column = 1376 # self.start_row = 1 # self.end_row = 300 def image_record_param_changed(self, dictionary): ''' :param dictionary: {'image_dir':值, 'image_record_param': 值} :return: ''' try: # print('接收的参数个数:', len(dictionary.keys())) config = configparser.ConfigParser() config.read(self.corning_config_file) for key in dictionary.keys(): # self.key = dictionary[key] # config.set('image_record_param', key, dictionary[key]) if key == 'image_dir': self.image_dir = dictionary[key] config.set('image_record_param', key, dictionary[key]) if key == 'default_image_name': self.default_image_name = dictionary[key] config.set('image_record_param', key, dictionary[key]) if key == 'framerate': self.framerate = dictionary[key] config.set('image_record_param', key, str(dictionary[key])) if key == 'exposure_time': self.exposure_time = dictionary[key] config.set('image_record_param', key, str(dictionary[key])) if key == 'gain': self.gain = dictionary[key] config.set('image_record_param', key, str(dictionary[key])) if key == 'frame_number': self.frame_number = dictionary[key] config.set('image_record_param', key, str(dictionary[key])) if key == 'arcus_speed': self.arcus_speed = dictionary[key] config.set('image_record_param', key, str(dictionary[key])) except: traceback.print_exc() with open(self.corning_config_file, 'w') as f: config.write(f) def spectral_record_param_changed(self, dictionary): ''' :param dictionary: {'image_dir':值, 'image_record_param': 值} :return: ''' print(len(dictionary.keys())) config = configparser.ConfigParser() config.read(self.corning_config_file) try: for key in dictionary.keys(): if key == 'spectral_dir': self.spectral_dir = dictionary[key] config.set('spectral_record_param', key, dictionary[key]) if key == 'default_spectral_name': self.default_spectral_name = dictionary[key] config.set('spectral_record_param', key, dictionary[key]) if key == 'spectral_number': self.spectral_number = dictionary[key] config.set('spectral_record_param', key, str(dictionary[key])) if key == 'framenumber_average': self.framenumber_average = dictionary[key] config.set('spectral_record_param', key, str(dictionary[key])) if key == 'exposure_time_spectral': self.exposure_time_spectral = dictionary[key] config.set('spectral_record_param', key, str(dictionary[key])) except: traceback.print_exc() with open(self.corning_config_file, 'w') as f: config.write(f) if __name__ == '__main__': x = ConfigFile()