Loading ballontranslator/__main__.py +13 −4 Original line number Diff line number Diff line Loading @@ -2,17 +2,26 @@ import sys import argparse import os.path as osp import os from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QTranslator, QLocale from ui.mainwindow import MainWindow from ui.constants import PROGRAM_PATH QT_APIS = ['pyqt5', 'pyqt6', 'pyside2', 'pyside6'] def main(): parser = argparse.ArgumentParser() parser.add_argument("--proj-dir", default='', type=str, help='Open project directory on startup') parser.add_argument("--qt-api", default='', choices=QT_APIS, help='Set qt api') args = parser.parse_args() if not args.qt_api in QT_APIS: os.environ['QT_API'] = 'pyqt5' else: os.environ['QT_API'] = args.qt_api from qtpy.QtWidgets import QApplication from qtpy.QtCore import QTranslator, QLocale from ui.mainwindow import MainWindow from ui.constants import PROGRAM_PATH os.chdir(PROGRAM_PATH) app = QApplication(sys.argv) translator = QTranslator() Loading ballontranslator/tests/ppi_test.py +4 −7 Original line number Diff line number Diff line import sys, os sys.path.append(os.getcwd()) from PyQt5.QtCore import Qt, QRectF, QRect from PyQt5.QtGui import QPixmap, QImage, QPainter, QFont, QColor import sys from PyQt5.QtWidgets import QApplication, QWidget from qtpy.QtCore import Qt, QRectF, QRect from qtpy.QtGui import QPixmap, QImage, QPainter, QFont, QColor from qtpy.QtWidgets import QApplication, QWidget from ui.constants import DPI, LDPI # PPI_LINUX Loading @@ -24,7 +21,7 @@ class MyWidget(QWidget): super().__init__() image = QImage(1000, 1000, QImage.Format_ARGB32) image.fill(Qt.GlobalColor.transparent) from PyQt5.QtGui import QGuiApplication from qtpy.QtGui import QGuiApplication DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() print(f'DPI: {DPI}, LDPI: {LDPI}') Loading ballontranslator/ui/canvas.py +37 −31 Original line number Diff line number Diff line import numpy as np from PyQt5.QtWidgets import QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QUndoStack, QRubberBand from PyQt5.QtCore import Qt, QRect, QRectF, QPointF, QPoint, pyqtSignal, QSizeF, QObject, QEvent from PyQt5.QtGui import QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QPen, QPainterPath from typing import List, Union, Tuple from .misc import ndarray2pixmap, pixmap2ndarray, qrgb2bgr, ProjImgTrans from qtpy.QtWidgets import QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QRubberBand from qtpy.QtCore import Qt, QRect, QRectF, QPointF, QPoint, Signal, QSizeF, QObject, QEvent from qtpy.QtGui import QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QPen, QPainterPath try: from qtpy.QtWidgets import QUndoStack except: from PyQt6.QtGui import QUndoStack from .misc import ndarray2pixmap, ProjImgTrans from .textitem import TextBlkItem, TextBlock from .texteditshapecontrol import TextBlkShapeControl from .stylewidgets import FadeLabel from .image_edit import StrokeItem, PenStrokeItem, PenStrokeCommand, ImageEditMode from .image_edit import StrokeItem, StrokeItem, ImageEditMode CANVAS_SCALE_MAX = 3.0 CANVAS_SCALE_MIN = 0.1 Loading @@ -18,11 +24,11 @@ CANVAS_SCALE_SPEED = 0.1 class CustomGV(QGraphicsView): do_scale = True ctrl_pressed = False scale_up_signal = pyqtSignal() scale_down_signal = pyqtSignal() view_resized = pyqtSignal() hide_canvas = pyqtSignal() ctrl_released = pyqtSignal() scale_up_signal = Signal() scale_down_signal = Signal() view_resized = Signal() hide_canvas = Signal() ctrl_released = Signal() def wheelEvent(self, event : QWheelEvent) -> None: # qgraphicsview always scroll content according to wheelevent Loading Loading @@ -65,18 +71,18 @@ class CustomGV(QGraphicsView): class Canvas(QGraphicsScene): scalefactor_changed = pyqtSignal() end_create_textblock = pyqtSignal(QRectF) end_create_rect = pyqtSignal(QRectF, int) finish_painting = pyqtSignal(StrokeItem) finish_erasing = pyqtSignal(StrokeItem) delete_textblks = pyqtSignal() format_textblks = pyqtSignal() scalefactor_changed = Signal() end_create_textblock = Signal(QRectF) end_create_rect = Signal(QRectF, int) finish_painting = Signal(StrokeItem) finish_erasing = Signal(StrokeItem) delete_textblks = Signal() format_textblks = Signal() begin_scale_tool = pyqtSignal(QPointF) scale_tool = pyqtSignal(QPointF) end_scale_tool = pyqtSignal() canvas_undostack_changed = pyqtSignal() begin_scale_tool = Signal(QPointF) scale_tool = Signal(QPointF) end_scale_tool = Signal() canvas_undostack_changed = Signal() imgtrans_proj: ProjImgTrans = None painting_pen = QPen() Loading @@ -85,7 +91,7 @@ class Canvas(QGraphicsScene): scale_tool_mode = False projstate_unsaved = False proj_savestate_changed = pyqtSignal(bool) proj_savestate_changed = Signal(bool) def __init__(self, parent=None): super().__init__(parent) Loading @@ -99,7 +105,7 @@ class Canvas(QGraphicsScene): self.hovering_textblkitem: TextBlkItem = None self.gv = CustomGV(self) self.gv.setAlignment(Qt.AlignCenter) self.gv.setAlignment(Qt.AlignmentFlag.AlignCenter) self.gv.setDragMode(QGraphicsView.DragMode.ScrollHandDrag) self.gv.scale_down_signal.connect(self.scaleDown) self.gv.scale_up_signal.connect(self.scaleUp) Loading @@ -116,7 +122,7 @@ class Canvas(QGraphicsScene): self.undoStack = QUndoStack(self) self.undoStack.indexChanged.connect(self.on_undostack_changed) self.scaleFactorLabel = FadeLabel(self.gv) self.scaleFactorLabel.setAlignment(Qt.AlignCenter) self.scaleFactorLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) self.scaleFactorLabel.setText('100%') self.scaleFactorLabel.gv = self.gv Loading Loading @@ -245,7 +251,7 @@ class Canvas(QGraphicsScene): def startCreateTextblock(self, pos: QPointF, hide_control: bool = False): self.creating_textblock = True self.create_block_origin = pos self.gv.setCursor(Qt.CrossCursor) self.gv.setCursor(Qt.CursorShape.CrossCursor) self.txtblkShapeControl.setBlkItem(None) self.txtblkShapeControl.setPos(0, 0) self.txtblkShapeControl.setRotation(0) Loading @@ -256,7 +262,7 @@ class Canvas(QGraphicsScene): def endCreateTextblock(self, btn=0): self.creating_textblock = False self.gv.setCursor(Qt.ArrowCursor) self.gv.setCursor(Qt.CursorShape.ArrowCursor) self.txtblkShapeControl.hide() if self.creating_normal_rect: self.end_create_rect.emit(self.txtblkShapeControl.rect(), btn) Loading Loading @@ -292,13 +298,13 @@ class Canvas(QGraphicsScene): self.scale_tool_mode = True self.begin_scale_tool.emit(event.scenePos()) elif self.painting and self.stroke_path_item is None: self.stroke_path_item = PenStrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.addStrokeItem(self.stroke_path_item) elif event.button() == Qt.MouseButton.RightButton: # user is drawing using eraser if self.painting and self.stroke_path_item is None: self.stroke_path_item = PenStrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.addStrokeItem(self.stroke_path_item) else: # rubber band selection self.rubber_band_origin = event.scenePos() Loading @@ -316,7 +322,7 @@ class Canvas(QGraphicsScene): if self.creating_textblock: btn = 0 if event.button() == Qt.MouseButton.LeftButton else 1 return self.endCreateTextblock(btn=btn) elif event.button() == Qt.RightButton: elif event.button() == Qt.MouseButton.RightButton: if self.stroke_path_item is not None: self.finish_erasing.emit(self.stroke_path_item) if self.rubber_band.isVisible(): Loading ballontranslator/ui/configpanel.py +10 −10 Original line number Diff line number Diff line from PyQt5.QtWidgets import QLayout, QHBoxLayout, QVBoxLayout, QTreeView, QPlainTextEdit, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal, QPointF, QPoint, QSize, QSizeF, QObject, QEvent from PyQt5.QtGui import QStandardItem, QStandardItemModel, QMouseEvent, QCloseEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QTextFrame, QTransform, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QTextOption, QTextLine, QPen, QColor, QTextFormat, QTextCursor, QPalette, QTextDocument from qtpy.QtWidgets import QLayout, QHBoxLayout, QVBoxLayout, QTreeView, QWidget, QLabel, QSizePolicy, QSpacerItem, QCheckBox, QSplitter, QScrollArea, QGroupBox from qtpy.QtCore import Qt, QModelIndex, Signal, QSize from qtpy.QtGui import QStandardItem, QStandardItemModel, QMouseEvent, QFont, QColor, QPalette from PyQt5 import QtCore from typing import List, Union, Tuple Loading @@ -27,7 +27,7 @@ class ConfigTextLabel(QLabel): class ConfigSubBlock(Widget): pressed = pyqtSignal(int, int) pressed = Signal(int, int) def __init__(self, widget: Union[QWidget, QLayout], name: str = None, discription: str = None, vertical_layout=True) -> None: super().__init__() self.idx0: int = None Loading Loading @@ -58,7 +58,7 @@ class ConfigSubBlock(Widget): class ConfigBlock(Widget): sublock_pressed = pyqtSignal(int, int) sublock_pressed = Signal(int, int) def __init__(self, header: str, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.header = ConfigTextLabel(header, CONFIG_FONTSIZE_HEADER) Loading Loading @@ -119,11 +119,11 @@ class ConfigContent(QScrollArea): super().__init__(*args, **kwargs) self.config_block_list: List[ConfigBlock] = [] self.scrollContent = QGroupBox() self.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop) self.setWidget(self.scrollContent) vlayout = QVBoxLayout() vlayout.setContentsMargins(32, 0, 0, 0) vlayout.setAlignment(Qt.AlignTop) vlayout.setAlignment(Qt.AlignmentFlag.AlignTop) self.scrollContent.setLayout(vlayout) self.setWidgetResizable(True) self.vlayout = vlayout Loading Loading @@ -169,7 +169,7 @@ class TreeModel(QStandardItemModel): def data(self, index, role): if not index.isValid(): return None if role == Qt.SizeHintRole: if role == Qt.ItemDataRole.SizeHintRole: size = QSize() item = self.itemFromIndex(index) size.setHeight(item.font().pointSize()+40) Loading @@ -179,7 +179,7 @@ class TreeModel(QStandardItemModel): class ConfigTable(QTreeView): tableitem_pressed = pyqtSignal(int, int) tableitem_pressed = Signal(int, int) def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading Loading @@ -299,7 +299,7 @@ class ConfigPanel(Widget): self.let_fntcolor_combox = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('font & stroke color')) self.let_fntcolor_combox.currentIndexChanged.connect(self.on_fontcolor_flag_changed) splitter = QSplitter(Qt.Horizontal) splitter = QSplitter(Qt.Orientation.Horizontal) splitter.addWidget(self.configTable) splitter.addWidget(self.configContent) splitter.setStretchFactor(0, 1) Loading ballontranslator/ui/cursor.py +7 −7 Original line number Diff line number Diff line from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QPixmap from PyQt5.QtGui import QCursor from qtpy.QtCore import Qt from qtpy.QtGui import QPixmap, QPixmap from qtpy.QtGui import QCursor from functools import cached_property Loading Loading @@ -41,9 +41,9 @@ class RotateCursorList: return self.__getattribute__('Cursor' + str(idx)) resizeCursorList = [ Qt.SizeFDiagCursor, Qt.SizeVerCursor, Qt.SizeBDiagCursor, Qt.SizeHorCursor Qt.CursorShape.SizeFDiagCursor, Qt.CursorShape.SizeVerCursor, Qt.CursorShape.SizeBDiagCursor, Qt.CursorShape.SizeHorCursor ] rotateCursorList = RotateCursorList() No newline at end of file Loading
ballontranslator/__main__.py +13 −4 Original line number Diff line number Diff line Loading @@ -2,17 +2,26 @@ import sys import argparse import os.path as osp import os from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QTranslator, QLocale from ui.mainwindow import MainWindow from ui.constants import PROGRAM_PATH QT_APIS = ['pyqt5', 'pyqt6', 'pyside2', 'pyside6'] def main(): parser = argparse.ArgumentParser() parser.add_argument("--proj-dir", default='', type=str, help='Open project directory on startup') parser.add_argument("--qt-api", default='', choices=QT_APIS, help='Set qt api') args = parser.parse_args() if not args.qt_api in QT_APIS: os.environ['QT_API'] = 'pyqt5' else: os.environ['QT_API'] = args.qt_api from qtpy.QtWidgets import QApplication from qtpy.QtCore import QTranslator, QLocale from ui.mainwindow import MainWindow from ui.constants import PROGRAM_PATH os.chdir(PROGRAM_PATH) app = QApplication(sys.argv) translator = QTranslator() Loading
ballontranslator/tests/ppi_test.py +4 −7 Original line number Diff line number Diff line import sys, os sys.path.append(os.getcwd()) from PyQt5.QtCore import Qt, QRectF, QRect from PyQt5.QtGui import QPixmap, QImage, QPainter, QFont, QColor import sys from PyQt5.QtWidgets import QApplication, QWidget from qtpy.QtCore import Qt, QRectF, QRect from qtpy.QtGui import QPixmap, QImage, QPainter, QFont, QColor from qtpy.QtWidgets import QApplication, QWidget from ui.constants import DPI, LDPI # PPI_LINUX Loading @@ -24,7 +21,7 @@ class MyWidget(QWidget): super().__init__() image = QImage(1000, 1000, QImage.Format_ARGB32) image.fill(Qt.GlobalColor.transparent) from PyQt5.QtGui import QGuiApplication from qtpy.QtGui import QGuiApplication DPI = QGuiApplication.primaryScreen().physicalDotsPerInch() LDPI = QGuiApplication.primaryScreen().logicalDotsPerInch() print(f'DPI: {DPI}, LDPI: {LDPI}') Loading
ballontranslator/ui/canvas.py +37 −31 Original line number Diff line number Diff line import numpy as np from PyQt5.QtWidgets import QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QUndoStack, QRubberBand from PyQt5.QtCore import Qt, QRect, QRectF, QPointF, QPoint, pyqtSignal, QSizeF, QObject, QEvent from PyQt5.QtGui import QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QPen, QPainterPath from typing import List, Union, Tuple from .misc import ndarray2pixmap, pixmap2ndarray, qrgb2bgr, ProjImgTrans from qtpy.QtWidgets import QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QRubberBand from qtpy.QtCore import Qt, QRect, QRectF, QPointF, QPoint, Signal, QSizeF, QObject, QEvent from qtpy.QtGui import QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QPen, QPainterPath try: from qtpy.QtWidgets import QUndoStack except: from PyQt6.QtGui import QUndoStack from .misc import ndarray2pixmap, ProjImgTrans from .textitem import TextBlkItem, TextBlock from .texteditshapecontrol import TextBlkShapeControl from .stylewidgets import FadeLabel from .image_edit import StrokeItem, PenStrokeItem, PenStrokeCommand, ImageEditMode from .image_edit import StrokeItem, StrokeItem, ImageEditMode CANVAS_SCALE_MAX = 3.0 CANVAS_SCALE_MIN = 0.1 Loading @@ -18,11 +24,11 @@ CANVAS_SCALE_SPEED = 0.1 class CustomGV(QGraphicsView): do_scale = True ctrl_pressed = False scale_up_signal = pyqtSignal() scale_down_signal = pyqtSignal() view_resized = pyqtSignal() hide_canvas = pyqtSignal() ctrl_released = pyqtSignal() scale_up_signal = Signal() scale_down_signal = Signal() view_resized = Signal() hide_canvas = Signal() ctrl_released = Signal() def wheelEvent(self, event : QWheelEvent) -> None: # qgraphicsview always scroll content according to wheelevent Loading Loading @@ -65,18 +71,18 @@ class CustomGV(QGraphicsView): class Canvas(QGraphicsScene): scalefactor_changed = pyqtSignal() end_create_textblock = pyqtSignal(QRectF) end_create_rect = pyqtSignal(QRectF, int) finish_painting = pyqtSignal(StrokeItem) finish_erasing = pyqtSignal(StrokeItem) delete_textblks = pyqtSignal() format_textblks = pyqtSignal() scalefactor_changed = Signal() end_create_textblock = Signal(QRectF) end_create_rect = Signal(QRectF, int) finish_painting = Signal(StrokeItem) finish_erasing = Signal(StrokeItem) delete_textblks = Signal() format_textblks = Signal() begin_scale_tool = pyqtSignal(QPointF) scale_tool = pyqtSignal(QPointF) end_scale_tool = pyqtSignal() canvas_undostack_changed = pyqtSignal() begin_scale_tool = Signal(QPointF) scale_tool = Signal(QPointF) end_scale_tool = Signal() canvas_undostack_changed = Signal() imgtrans_proj: ProjImgTrans = None painting_pen = QPen() Loading @@ -85,7 +91,7 @@ class Canvas(QGraphicsScene): scale_tool_mode = False projstate_unsaved = False proj_savestate_changed = pyqtSignal(bool) proj_savestate_changed = Signal(bool) def __init__(self, parent=None): super().__init__(parent) Loading @@ -99,7 +105,7 @@ class Canvas(QGraphicsScene): self.hovering_textblkitem: TextBlkItem = None self.gv = CustomGV(self) self.gv.setAlignment(Qt.AlignCenter) self.gv.setAlignment(Qt.AlignmentFlag.AlignCenter) self.gv.setDragMode(QGraphicsView.DragMode.ScrollHandDrag) self.gv.scale_down_signal.connect(self.scaleDown) self.gv.scale_up_signal.connect(self.scaleUp) Loading @@ -116,7 +122,7 @@ class Canvas(QGraphicsScene): self.undoStack = QUndoStack(self) self.undoStack.indexChanged.connect(self.on_undostack_changed) self.scaleFactorLabel = FadeLabel(self.gv) self.scaleFactorLabel.setAlignment(Qt.AlignCenter) self.scaleFactorLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) self.scaleFactorLabel.setText('100%') self.scaleFactorLabel.gv = self.gv Loading Loading @@ -245,7 +251,7 @@ class Canvas(QGraphicsScene): def startCreateTextblock(self, pos: QPointF, hide_control: bool = False): self.creating_textblock = True self.create_block_origin = pos self.gv.setCursor(Qt.CrossCursor) self.gv.setCursor(Qt.CursorShape.CrossCursor) self.txtblkShapeControl.setBlkItem(None) self.txtblkShapeControl.setPos(0, 0) self.txtblkShapeControl.setRotation(0) Loading @@ -256,7 +262,7 @@ class Canvas(QGraphicsScene): def endCreateTextblock(self, btn=0): self.creating_textblock = False self.gv.setCursor(Qt.ArrowCursor) self.gv.setCursor(Qt.CursorShape.ArrowCursor) self.txtblkShapeControl.hide() if self.creating_normal_rect: self.end_create_rect.emit(self.txtblkShapeControl.rect(), btn) Loading Loading @@ -292,13 +298,13 @@ class Canvas(QGraphicsScene): self.scale_tool_mode = True self.begin_scale_tool.emit(event.scenePos()) elif self.painting and self.stroke_path_item is None: self.stroke_path_item = PenStrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.addStrokeItem(self.stroke_path_item) elif event.button() == Qt.MouseButton.RightButton: # user is drawing using eraser if self.painting and self.stroke_path_item is None: self.stroke_path_item = PenStrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.stroke_path_item = StrokeItem(self.imgLayer.mapFromScene(event.scenePos())) self.addStrokeItem(self.stroke_path_item) else: # rubber band selection self.rubber_band_origin = event.scenePos() Loading @@ -316,7 +322,7 @@ class Canvas(QGraphicsScene): if self.creating_textblock: btn = 0 if event.button() == Qt.MouseButton.LeftButton else 1 return self.endCreateTextblock(btn=btn) elif event.button() == Qt.RightButton: elif event.button() == Qt.MouseButton.RightButton: if self.stroke_path_item is not None: self.finish_erasing.emit(self.stroke_path_item) if self.rubber_band.isVisible(): Loading
ballontranslator/ui/configpanel.py +10 −10 Original line number Diff line number Diff line from PyQt5.QtWidgets import QLayout, QHBoxLayout, QVBoxLayout, QTreeView, QPlainTextEdit, QWidget, QFileDialog, QLabel, QSizePolicy, QComboBox, QListView, QToolBar, QMenu, QSpacerItem, QPushButton, QAction, QCheckBox, QToolButton, QSplitter, QStylePainter, QStyleOption, QStyle, QScrollArea, QLineEdit, QGroupBox, QGraphicsSimpleTextItem from PyQt5.QtCore import Qt, QModelIndex, pyqtSignal, QPointF, QPoint, QSize, QSizeF, QObject, QEvent from PyQt5.QtGui import QStandardItem, QStandardItemModel, QMouseEvent, QCloseEvent, QWheelEvent, QResizeEvent, QKeySequence, QPainter, QTextFrame, QTransform, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QTextOption, QTextLine, QPen, QColor, QTextFormat, QTextCursor, QPalette, QTextDocument from qtpy.QtWidgets import QLayout, QHBoxLayout, QVBoxLayout, QTreeView, QWidget, QLabel, QSizePolicy, QSpacerItem, QCheckBox, QSplitter, QScrollArea, QGroupBox from qtpy.QtCore import Qt, QModelIndex, Signal, QSize from qtpy.QtGui import QStandardItem, QStandardItemModel, QMouseEvent, QFont, QColor, QPalette from PyQt5 import QtCore from typing import List, Union, Tuple Loading @@ -27,7 +27,7 @@ class ConfigTextLabel(QLabel): class ConfigSubBlock(Widget): pressed = pyqtSignal(int, int) pressed = Signal(int, int) def __init__(self, widget: Union[QWidget, QLayout], name: str = None, discription: str = None, vertical_layout=True) -> None: super().__init__() self.idx0: int = None Loading Loading @@ -58,7 +58,7 @@ class ConfigSubBlock(Widget): class ConfigBlock(Widget): sublock_pressed = pyqtSignal(int, int) sublock_pressed = Signal(int, int) def __init__(self, header: str, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.header = ConfigTextLabel(header, CONFIG_FONTSIZE_HEADER) Loading Loading @@ -119,11 +119,11 @@ class ConfigContent(QScrollArea): super().__init__(*args, **kwargs) self.config_block_list: List[ConfigBlock] = [] self.scrollContent = QGroupBox() self.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop) self.setWidget(self.scrollContent) vlayout = QVBoxLayout() vlayout.setContentsMargins(32, 0, 0, 0) vlayout.setAlignment(Qt.AlignTop) vlayout.setAlignment(Qt.AlignmentFlag.AlignTop) self.scrollContent.setLayout(vlayout) self.setWidgetResizable(True) self.vlayout = vlayout Loading Loading @@ -169,7 +169,7 @@ class TreeModel(QStandardItemModel): def data(self, index, role): if not index.isValid(): return None if role == Qt.SizeHintRole: if role == Qt.ItemDataRole.SizeHintRole: size = QSize() item = self.itemFromIndex(index) size.setHeight(item.font().pointSize()+40) Loading @@ -179,7 +179,7 @@ class TreeModel(QStandardItemModel): class ConfigTable(QTreeView): tableitem_pressed = pyqtSignal(int, int) tableitem_pressed = Signal(int, int) def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading Loading @@ -299,7 +299,7 @@ class ConfigPanel(Widget): self.let_fntcolor_combox = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('font & stroke color')) self.let_fntcolor_combox.currentIndexChanged.connect(self.on_fontcolor_flag_changed) splitter = QSplitter(Qt.Horizontal) splitter = QSplitter(Qt.Orientation.Horizontal) splitter.addWidget(self.configTable) splitter.addWidget(self.configContent) splitter.setStretchFactor(0, 1) Loading
ballontranslator/ui/cursor.py +7 −7 Original line number Diff line number Diff line from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QPixmap from PyQt5.QtGui import QCursor from qtpy.QtCore import Qt from qtpy.QtGui import QPixmap, QPixmap from qtpy.QtGui import QCursor from functools import cached_property Loading Loading @@ -41,9 +41,9 @@ class RotateCursorList: return self.__getattribute__('Cursor' + str(idx)) resizeCursorList = [ Qt.SizeFDiagCursor, Qt.SizeVerCursor, Qt.SizeBDiagCursor, Qt.SizeHorCursor Qt.CursorShape.SizeFDiagCursor, Qt.CursorShape.SizeVerCursor, Qt.CursorShape.SizeBDiagCursor, Qt.CursorShape.SizeHorCursor ] rotateCursorList = RotateCursorList() No newline at end of file