Source code for entry_exit_mouse_box._batch_converter_widget

import os
from qtpy.QtWidgets import (QWidget, QVBoxLayout, QLineEdit, QHBoxLayout,
                            QPushButton, QFileDialog, QLabel)
from qtpy.QtCore import QThread
import napari
from napari.utils import progress
from napari.utils.notifications import show_info
from entry_exit_mouse_box.convert_format import QtWorkerC2A


[docs] class VideoConverterWidget(QWidget): def __init__(self, napari_viewer: "napari.Viewer"): super().__init__() self.selected_folder = None self.viewer = napari_viewer self.current = 0 self.files = None self.init_ui()
[docs] def init_ui(self): self.btn_select_folder = QPushButton("Input folder", self) self.extension_field = QLineEdit(self) self.btn_start_conversion = QPushButton("Launch", self) self.btn_start_conversion.setEnabled(False) layout = QVBoxLayout() layout.addWidget(self.btn_select_folder) h_layout = QHBoxLayout() h_layout.addWidget(QLabel("Extension:")) h_layout.addWidget(self.extension_field) layout.addLayout(h_layout) layout.addSpacing(20) layout.addWidget(self.btn_start_conversion) self.setLayout(layout) self.btn_select_folder.clicked.connect(self.select_folder) self.btn_start_conversion.clicked.connect(self.start_conversion)
[docs] def select_folder(self): folder = QFileDialog.getExistingDirectory(self, "Select a folder") if not folder: return self.selected_folder = folder self.btn_start_conversion.setEnabled(True)
[docs] def start_conversion(self): if not self.selected_folder: return self.files = [os.path.join(self.selected_folder, f) for f in os.listdir(self.selected_folder) if f.endswith(self.extension_field.text())] if not self.files: show_info("No file found.") return self.launch_convert(self.files[self.current])
[docs] def launch_convert(self, file_path): output_folder = os.path.join( os.path.dirname(file_path), ".".join(os.path.basename(file_path).split(".")[:-1]) + ".tmp" ) print("OUTPUT:", output_folder) os.makedirs(output_folder, exist_ok=True) self.set_active_ui(False) show_info("Converting video:" + file_path) self.pbr = progress(total=0) self.pbr.set_description("Converting video...") self.thread = QThread() self.c2a = QtWorkerC2A(file_path, os.path.join(output_folder, os.path.basename(file_path))) self.c2a.moveToThread(self.thread) self.c2a.file_ready.connect(self.done_a_file) self.thread.started.connect(self.c2a.run) self.thread.start()
[docs] def done_a_file(self, _): print(f"Finished file {str(self.current+1).zfill(2)}/{str(len(self.files)).zfill(2)}") self.pbr.close() self.thread.quit() self.thread.wait() self.thread.deleteLater() self.thread = None self.set_active_ui(True) self.current += 1 if self.current < len(self.files): self.launch_convert(self.files[self.current]) else: show_info("All files converted")
[docs] def set_active_ui(self, active): self.btn_select_folder.setEnabled(active) self.extension_field.setEnabled(active) self.btn_start_conversion.setEnabled(active)