Exemplo n.º 1
0
class MaskEditor:
    UI: Ui_MainWindow = None
    win: QtWidgets.QMainWindow = None
    IP: ImageProcessor = None
    # 版本
    ver = 10

    def __init__(self, _ui: Ui_MainWindow, _win: QtWidgets.QMainWindow):
        self.UI = _ui
        self.win = _win
        self.IP = ImageProcessor()
        self.IP.UI = _ui
        self.IP.init()
        self.IP.main_window = _win

        # 滑鼠事件
        self.UI.graphicsView.mouseMoveEvent = self.IP.mouse_movement
        self.UI.graphicsView.mousePressEvent = self.IP.start_paint
        self.UI.graphicsView.mouseReleaseEvent = self.IP.end_paint
        # 鍵盤事件
        self.win.keyPressEvent = self.IP.key_event
        # 滾輪事件
        self.UI.graphicsView.wheelEvent = self.IP.mouse_wheel_event
        # 離開程式事件
        self.win.closeEvent = self.IP.on_exit
        # 調整視窗大小事件
        self.win.resizeEvent = self.IP.scale_to_fit

    def init(self):
        # 產生繪圖場景
        self.IP.scene = QtWidgets.QGraphicsScene()
        self.UI.graphicsView.setScene(self.IP.scene)
        # 連結 UI 功能
        self.UI.action_Open.triggered.connect(lambda: self.IP.init(True))
        self.UI.action_Export_to_Mask.triggered.connect(self.IP.save_mask)
        self.UI.action_Save.triggered.connect(self.IP.refresh_masks)
        self.UI.action_Settings.triggered.connect(self.IP.change_settings)
        self.UI.action_Quit.triggered.connect(self.win.close)
        self.UI.action_Undo.triggered.connect(self.IP.undo_changes)
        self.UI.action_Redo.triggered.connect(self.IP.redo_changes)
        self.UI.action_Delete.triggered.connect(self.IP.delete_mask)
        self.UI.action_Add_Class.triggered.connect(self.IP.add_class)
        self.UI.action_Select_Polygon.triggered.connect(
            self.IP.change_paint_mode)
        self.UI.FuncBtn1.clicked.connect(
            lambda: self.IP.change_image(max(self.IP.FM.index - 1, 0)))
        self.UI.FuncBtn2.clicked.connect(lambda: self.IP.change_image(
            min(self.IP.FM.index + 1,
                len(self.IP.FM.image_list) - 1)))
        self.UI.FuncBtn5.clicked.connect(
            lambda: self.IP.scale_display(self.IP.zoom_scale))
        self.UI.FuncBtn6.clicked.connect(
            lambda: self.IP.scale_display(-self.IP.zoom_scale))
        self.UI.listWidget.itemClicked.connect(
            lambda: self.IP.change_image(self.UI.listWidget.currentRow()))
        self.UI.BrushSizeSlider.valueChanged.connect(self.IP.change_brush_size)
        self.UI.brightnessSlider.valueChanged.connect(
            self.IP.change_photo_brightness)
        self.UI.ColorBtn1.clicked.connect(
            lambda: self.IP.change_brush_color(0))
        self.UI.ColorBtn2.clicked.connect(
            lambda: self.IP.change_brush_color(1))
        self.UI.ColorBtn3.clicked.connect(
            lambda: self.IP.change_brush_color(2))
        self.UI.ColorBtn4.clicked.connect(
            lambda: self.IP.change_brush_color(3))
        self.UI.ColorBtn5.clicked.connect(
            lambda: self.IP.change_brush_color(4))
        self.UI.ColorBtn6.clicked.connect(
            lambda: self.IP.change_brush_color(5))
        self.UI.EraserBtn.clicked.connect(self.IP.erase_mode_on)

        # 檔案列表
        self.UI.listWidget.addItems(self.IP.FM.image_list)
        # 設定初始圖片
        self.IP.change_image(self.IP.FM.index)
        # 產生筆刷游標
        self.UI.BrushSizeSlider.setValue(self.IP.brush_size)
        self.IP.gen_brush()