Loading README.md +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ ## 界面说明及快捷键 * Ctrl+Z, Ctrl+Y可以撤销重做大部分操作,注意翻页后撤消重做栈会清空 * A/D翻页, 如果当前页面未保存会自动保存, 大图会卡一会 * A/D翻页, 如果当前页面未保存会自动保存 * 文本编辑模式下(底部最右"T"图标), W激活文本块创建模式后在画布右键拉文本框 * 画板模式下右下角滑条改原图透明度 * 底部左侧"OCR"和"A"按钮控制启用/禁用OCR翻译功能, 禁用后再Run程序就只做文本检测和抹字 Loading ui/mainwindow.py +16 −7 Original line number Diff line number Diff line Loading @@ -2,9 +2,9 @@ import os.path as osp import os import json from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QFont from typing import List, Union, Tuple Loading @@ -17,12 +17,11 @@ from .drawingpanel import DrawingPanel from .scenetext_manager import SceneTextManager from .mainwindowbars import TitleBar, LeftBar, RightBar, BottomBar from .io_thread import ImgSaveThread from .stylewidgets import FrameLessMessageBox from .constants import STYLESHEET_PATH, CONFIG_PATH, DPI, LDPI, LANG_SUPPORT_VERTICAL from . import constants class PageListView(QListWidget): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading Loading @@ -100,7 +99,7 @@ class MainWindow(FrameLessWindow): self.centralStackWidget = QStackedWidget(self) self.titleBar = TitleBar(self) self.titleBar.closebtn_clicked.connect(self.on_closebtn_clicked) self.bottomBar = BottomBar(self) self.bottomBar.textedit_checkchanged.connect(self.setTextEditMode) self.bottomBar.paintmode_checkchanged.connect(self.setPaintMode) Loading Loading @@ -272,7 +271,6 @@ class MainWindow(FrameLessWindow): config_dict = self.config.to_dict() with open(CONFIG_PATH, 'w', encoding='utf8') as f: f.write(json.dumps(config_dict, ensure_ascii=False, indent=4, separators=(',', ':'))) # yaml.safe_dump(config_dict, f) return super().closeEvent(event) def onHideCanvas(self): Loading Loading @@ -313,7 +311,6 @@ class MainWindow(FrameLessWindow): row = (row + 1) % page_count self.pageList.setCurrentRow(row) def shortcutBefore(self): if self.centralStackWidget.currentIndex() == 0: index = self.pageList.currentIndex() Loading Loading @@ -456,3 +453,15 @@ class MainWindow(FrameLessWindow): size.height() - msg_size.height())) self.dl_manager.progress_msgbox.move(p) def on_closebtn_clicked(self): if self.imsave_thread.isRunning(): self.imsave_thread.finished.connect(self.close) mb = FrameLessMessageBox() mb.setText(self.tr('Saving image...')) self.imsave_thread.finished.connect(mb.close) mb.exec() return self.close() ui/mainwindowbars.py +2 −5 Original line number Diff line number Diff line Loading @@ -357,7 +357,7 @@ class RightBar(Widget): class TitleBar(Widget): closebtn_clicked = pyqtSignal() def __init__(self, parent, *args, **kwargs) -> None: super().__init__(parent, *args, **kwargs) self.mainwindow : QMainWindow = parent Loading @@ -382,7 +382,7 @@ class TitleBar(Widget): self.maxBtn.clicked.connect(self.onMaxBtnClicked) self.closeBtn = QPushButton() self.closeBtn.setObjectName('closeBtn') self.closeBtn.clicked.connect(self.onCloseBtnClicked) self.closeBtn.clicked.connect(self.closebtn_clicked) self.maxBtn.setFixedSize(72, 40) hlayout = QHBoxLayout(self) hlayout.setAlignment(Qt.AlignmentFlag.AlignCenter) Loading @@ -406,9 +406,6 @@ class TitleBar(Widget): def onMinBtnClicked(self): self.mainwindow.showMinimized() def onCloseBtnClicked(self): self.mainwindow.close() def mousePressEvent(self, event: QMouseEvent) -> None: if event.button() == Qt.LeftButton: if not self.mainwindow.isMaximized() and \ Loading ui/stylewidgets.py +6 −1 Original line number Diff line number Diff line from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QToolBar, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QMessageBox, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog from PyQt5.QtCore import Qt, QPropertyAnimation, QEasingCurve, QPointF, QRect, pyqtSignal, QSizeF, QObject, QEvent from PyQt5.QtGui import QFontMetrics, QMouseEvent, QShowEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QTextFrame, QTransform, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QColor, QTextFormat, QTextCursor, QTextCharFormat, QTextDocument from typing import List, Union, Tuple Loading Loading @@ -81,6 +81,11 @@ class TaskProgressBar(Widget): self.textlabel.setText(msg) self.progressbar.setValue(progress) class FrameLessMessageBox(QMessageBox): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) class ProgressMessageBox(QDialog): showed = pyqtSignal() def __init__(self, *args, **kwargs) -> None: Loading Loading
README.md +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ ## 界面说明及快捷键 * Ctrl+Z, Ctrl+Y可以撤销重做大部分操作,注意翻页后撤消重做栈会清空 * A/D翻页, 如果当前页面未保存会自动保存, 大图会卡一会 * A/D翻页, 如果当前页面未保存会自动保存 * 文本编辑模式下(底部最右"T"图标), W激活文本块创建模式后在画布右键拉文本框 * 画板模式下右下角滑条改原图透明度 * 底部左侧"OCR"和"A"按钮控制启用/禁用OCR翻译功能, 禁用后再Run程序就只做文本检测和抹字 Loading
ui/mainwindow.py +16 −7 Original line number Diff line number Diff line Loading @@ -2,9 +2,9 @@ import os.path as osp import os import json from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QApplication, QStackedWidget, QWidget, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QListWidget, QShortcut, QListWidgetItem from PyQt5.QtCore import Qt, pyqtSignal, QPoint, QSize, QThread from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter from PyQt5.QtGui import QGuiApplication, QIcon, QCloseEvent, QKeySequence, QImage, QPainter, QFont from typing import List, Union, Tuple Loading @@ -17,12 +17,11 @@ from .drawingpanel import DrawingPanel from .scenetext_manager import SceneTextManager from .mainwindowbars import TitleBar, LeftBar, RightBar, BottomBar from .io_thread import ImgSaveThread from .stylewidgets import FrameLessMessageBox from .constants import STYLESHEET_PATH, CONFIG_PATH, DPI, LDPI, LANG_SUPPORT_VERTICAL from . import constants class PageListView(QListWidget): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading Loading @@ -100,7 +99,7 @@ class MainWindow(FrameLessWindow): self.centralStackWidget = QStackedWidget(self) self.titleBar = TitleBar(self) self.titleBar.closebtn_clicked.connect(self.on_closebtn_clicked) self.bottomBar = BottomBar(self) self.bottomBar.textedit_checkchanged.connect(self.setTextEditMode) self.bottomBar.paintmode_checkchanged.connect(self.setPaintMode) Loading Loading @@ -272,7 +271,6 @@ class MainWindow(FrameLessWindow): config_dict = self.config.to_dict() with open(CONFIG_PATH, 'w', encoding='utf8') as f: f.write(json.dumps(config_dict, ensure_ascii=False, indent=4, separators=(',', ':'))) # yaml.safe_dump(config_dict, f) return super().closeEvent(event) def onHideCanvas(self): Loading Loading @@ -313,7 +311,6 @@ class MainWindow(FrameLessWindow): row = (row + 1) % page_count self.pageList.setCurrentRow(row) def shortcutBefore(self): if self.centralStackWidget.currentIndex() == 0: index = self.pageList.currentIndex() Loading Loading @@ -456,3 +453,15 @@ class MainWindow(FrameLessWindow): size.height() - msg_size.height())) self.dl_manager.progress_msgbox.move(p) def on_closebtn_clicked(self): if self.imsave_thread.isRunning(): self.imsave_thread.finished.connect(self.close) mb = FrameLessMessageBox() mb.setText(self.tr('Saving image...')) self.imsave_thread.finished.connect(mb.close) mb.exec() return self.close()
ui/mainwindowbars.py +2 −5 Original line number Diff line number Diff line Loading @@ -357,7 +357,7 @@ class RightBar(Widget): class TitleBar(Widget): closebtn_clicked = pyqtSignal() def __init__(self, parent, *args, **kwargs) -> None: super().__init__(parent, *args, **kwargs) self.mainwindow : QMainWindow = parent Loading @@ -382,7 +382,7 @@ class TitleBar(Widget): self.maxBtn.clicked.connect(self.onMaxBtnClicked) self.closeBtn = QPushButton() self.closeBtn.setObjectName('closeBtn') self.closeBtn.clicked.connect(self.onCloseBtnClicked) self.closeBtn.clicked.connect(self.closebtn_clicked) self.maxBtn.setFixedSize(72, 40) hlayout = QHBoxLayout(self) hlayout.setAlignment(Qt.AlignmentFlag.AlignCenter) Loading @@ -406,9 +406,6 @@ class TitleBar(Widget): def onMinBtnClicked(self): self.mainwindow.showMinimized() def onCloseBtnClicked(self): self.mainwindow.close() def mousePressEvent(self, event: QMouseEvent) -> None: if event.button() == Qt.LeftButton: if not self.mainwindow.isMaximized() and \ Loading
ui/stylewidgets.py +6 −1 Original line number Diff line number Diff line from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QToolBar, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog from PyQt5.QtWidgets import QGraphicsOpacityEffect, QFrame, QWidget, QComboBox, QLabel, QSizePolicy, QDialog, QProgressBar, QMessageBox, QMenu, QSpacerItem, QPushButton, QHBoxLayout, QVBoxLayout, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QSlider, QProxyStyle, QStyle, QStyleOptionSlider, QColorDialog from PyQt5.QtCore import Qt, QPropertyAnimation, QEasingCurve, QPointF, QRect, pyqtSignal, QSizeF, QObject, QEvent from PyQt5.QtGui import QFontMetrics, QMouseEvent, QShowEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QTextFrame, QTransform, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QColor, QTextFormat, QTextCursor, QTextCharFormat, QTextDocument from typing import List, Union, Tuple Loading Loading @@ -81,6 +81,11 @@ class TaskProgressBar(Widget): self.textlabel.setText(msg) self.progressbar.setValue(progress) class FrameLessMessageBox(QMessageBox): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.setWindowFlags(Qt.WindowType.FramelessWindowHint) class ProgressMessageBox(QDialog): showed = pyqtSignal() def __init__(self, *args, **kwargs) -> None: Loading