# -*- coding: utf-8 -*- import os from PySide6.QtGui import Qt from PySide6.QtWidgets import QFileDialog, QPushButton, QPlainTextEdit from videotrans.configure.config import tr, params from videotrans.configure import contants class DropButton(QPushButton): def __init__(self, text=""): super(DropButton, self).__init__(text) self.setAcceptDrops(True) self.clicked.connect(self.get_file) self.filelist = [] self.setCursor(Qt.PointingHandCursor) def get_file(self): format_str = " ".join(['*.' + f for f in contants.VIDEO_EXTS + contants.AUDIO_EXITS]) fnames, _ = QFileDialog.getOpenFileNames(self, tr('xuanzeyinpinwenjian'), params['last_opendir'], filter=f"Video/Audio files({format_str})") namestr = [] for (i, it) in enumerate(fnames): fnames[i] = it.replace('\\', '/') namestr.append(os.path.basename(it)) params['last_opendir']=os.path.dirname(it) self.filelist = fnames self.setText(f'{len(self.filelist)} files \n' + "\n".join(namestr)) def dragEnterEvent(self, event): files = event.mimeData().text().strip().lower() allow = True for it in files.split("\n"): if it.split('.')[-1] not in contants.VIDEO_EXTS + contants.AUDIO_EXITS: allow = False break if allow: event.accept() else: event.ignore() def dropEvent(self, event): filepath = event.mimeData().text().strip().split("\n") self.filelist = [file.replace('file:///', '') for file in filepath] self.setText(f'{len(self.filelist)} files') class PeiyinDropButton(QPushButton): def __init__(self, text=""): super(PeiyinDropButton, self).__init__(text) self.setAcceptDrops(True) self.clicked.connect(self.get_file) self.filelist = [] self.setCursor(Qt.PointingHandCursor) def get_file(self): fnames, _ = QFileDialog.getOpenFileNames(self, "Select srt/txt", params['last_opendir'], "Text files(*.srt *.txt)") namestr = [] for (i, it) in enumerate(fnames): fnames[i] = it.replace('\\', '/') namestr.append(os.path.basename(it)) params['last_opendir']=os.path.dirname(it) self.filelist = fnames self.setText(f'{len(self.filelist)} files \n' + "\n".join(namestr)) def dragEnterEvent(self, event): files = event.mimeData().text().strip().lower() allow = True for it in files.split("\n"): if it.split('.')[-1] not in ['srt','txt']: allow = False break if allow: event.accept() else: event.ignore() def dropEvent(self, event): filepath = event.mimeData().text().strip().split("\n") self.filelist = [file.replace('file:///', '') for file in filepath] self.setText(f'{len(self.filelist)} files') # 文本框 获取内容 class Textedit(QPlainTextEdit): def __init__(self): super(Textedit, self).__init__() self.setAcceptDrops(True) def dragEnterEvent(self, event): ext = event.mimeData().text().lower().split('.') if len(ext) > 0 and ext[-1] in ["txt", "srt"]: event.accept() else: event.ignore() def dropEvent(self, event): filepath = event.mimeData().text().replace('file:///', '') with open(filepath, 'r', encoding="utf-8") as f: self.setPlainText(f.read().strip()) def setText(self, filepath=None): try: with open(filepath, 'r', encoding="utf-8") as f: self.setPlainText(f.read().strip()) except Exception: with open(filepath, 'r', encoding="GBK") as f: self.setPlainText(f.read().strip()) class TextGetdir(QPlainTextEdit): def __init__(self): super(TextGetdir, self).__init__() self.setAcceptDrops(True) def dragEnterEvent(self, event): files = event.mimeData().text().split("\n") result = [] for it in files: if it != "" and it.split('.')[-1] in contants.VIDEO_EXTS + contants.AUDIO_EXITS: result.append(it) if len(result) > 0: event.acceptProposedAction() else: event.ignore() def dropEvent(self, event): files = event.mimeData().text().split("\n") result = [] if self.toPlainText().strip(): result = self.toPlainText().strip().split("\n") for it in files: if it != "" and it.split('.')[-1] in contants.VIDEO_EXTS + contants.AUDIO_EXITS: f = it.replace('file:///', '') if f not in result: result.append(f) self.setPlainText("\n".join(result))