def __init__(self, parent=None): QtWidgets.QDialog.__init__(self) self.setupUi(self) self.canvas = Canvas() self.point_widget = PointWidget(self.canvas, self) self.findChild(QtWidgets.QFrame, 'framePointWidget').layout().addWidget( self.point_widget) self.point_widget.hide_custom_fields.connect(self.hide_custom_fields) self.point_widget.saving.connect(self.display_quick_save) # Set up keyboard shortcuts self.save_shortcut = QtGui.QShortcut( QtGui.QKeySequence(self.tr("Ctrl+S")), self) # quick save using Ctrl+S self.save_shortcut.setContext( QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) self.save_shortcut.activated.connect(self.point_widget.quick_save) self.up_arrow = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key.Key_Up), self) self.up_arrow.setContext( QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) self.up_arrow.activated.connect(self.point_widget.previous) self.down_arrow = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key.Key_Down), self) self.down_arrow.setContext( QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) self.down_arrow.activated.connect(self.point_widget.next) # same as arrows but conventient for right handed people self.up_arrow = QtGui.QShortcut(QtGui.QKeySequence(self.tr("W")), self) self.up_arrow.setContext( QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) self.up_arrow.activated.connect(self.point_widget.previous) self.down_arrow = QtGui.QShortcut(QtGui.QKeySequence(self.tr("S")), self) self.down_arrow.setContext( QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) self.down_arrow.activated.connect(self.point_widget.next) # Make signal slot connections self.graphicsView.setScene(self.canvas) self.graphicsView.drop_complete.connect(self.canvas.load) self.graphicsView.region_selected.connect(self.canvas.select_points) self.graphicsView.delete_selection.connect( self.canvas.delete_selected_points) self.graphicsView.relabel_selection.connect( self.canvas.relabel_selected_points) self.graphicsView.toggle_points.connect( self.point_widget.checkBoxDisplayPoints.toggle) self.graphicsView.toggle_grid.connect( self.point_widget.checkBoxDisplayGrid.toggle) self.graphicsView.switch_class.connect( self.point_widget.set_active_class) self.graphicsView.add_point.connect(self.canvas.add_point) self.canvas.image_loaded.connect(self.graphicsView.image_loaded) self.canvas.directory_set.connect(self.display_working_directory) # Image data fields self.canvas.image_loaded.connect(self.display_coordinates) self.canvas.image_loaded.connect(self.get_custom_field_data) self.canvas.fields_updated.connect(self.display_custom_fields) self.lineEditX.textEdited.connect(self.update_coordinates) self.lineEditY.textEdited.connect(self.update_coordinates) # Buttons self.pushButtonAddField.clicked.connect(self.add_field_dialog) self.pushButtonDeleteField.clicked.connect(self.delete_field_dialog) self.pushButtonFolder.clicked.connect(self.select_folder) self.pushButtonZoomOut.clicked.connect(self.graphicsView.zoom_out) self.pushButtonZoomIn.clicked.connect(self.graphicsView.zoom_in) # Fix icons since no QRC file integration self.pushButtonFolder.setIcon(QtGui.QIcon('icons:folder.svg')) self.pushButtonZoomIn.setIcon(QtGui.QIcon('icons:zoom_in.svg')) self.pushButtonZoomOut.setIcon(QtGui.QIcon('icons:zoom_out.svg')) self.pushButtonDeleteField.setIcon(QtGui.QIcon('icons:delete.svg')) self.pushButtonAddField.setIcon(QtGui.QIcon('icons:add.svg')) self.quick_save_frame = QtWidgets.QFrame(self.graphicsView) self.quick_save_frame.setStyleSheet( "QFrame { background: #4caf50;color: #FFF;font-weight: bold}") self.quick_save_frame.setLayout(QtWidgets.QHBoxLayout()) self.quick_save_frame.layout().addWidget(QtWidgets.QLabel('Saving...')) self.quick_save_frame.setGeometry(3, 3, 100, 35) self.quick_save_frame.hide()
def __init__(self, parent = None): super(MainWindow, self).__init__() D = self.screen().availableGeometry() self.move(0,0)#center.x() + .25*D.width() , center.y() - .5*D.height() ) self.resize( int(.95*D.width()), int(6*D.height()) ) #qr = self.frameGeometry() #cp = self.screen().availableGeometry().center() #qr.moveCenter(cp) #self.move(qr.topLeft()) self.setWindowState(self.windowState() & ~QtCore.Qt.WindowState.WindowMinimized | QtCore.Qt.WindowState.WindowActive) self.activateWindow() self.subWin = Window() self.iw = imwin() self.Manual = Manual() self.setCentralWidget(self.iw) #Stacked dock widgets docked1 = QDockWidget("", self) docked2 = QDockWidget("", self) self.addDockWidget(QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, docked1) self.addDockWidget(QtCore.Qt.DockWidgetArea.LeftDockWidgetArea, docked2) docked1.setWidget(self.subWin) docked2.setWidget(self.Manual) docked1.setFeatures(QDockWidget.DockWidgetFeature.DockWidgetFloatable) self.setCorner(QtCore.Qt.Corner.TopLeftCorner, QtCore.Qt.DockWidgetArea.LeftDockWidgetArea); self.setCorner(QtCore.Qt.Corner.TopRightCorner, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) self.setCorner(QtCore.Qt.Corner.BottomLeftCorner, QtCore.Qt.DockWidgetArea.LeftDockWidgetArea); self.setCorner(QtCore.Qt.Corner.BottomRightCorner, QtCore.Qt.DockWidgetArea.RightDockWidgetArea) self.resizeDocks( (docked1,docked2), (400,400), QtCore.Qt.Orientation.Horizontal ) self.exportButton = QPushButton("Export Measurements", self) self.exportButton.clicked.connect(self.export_measurements) self.exportButton.setEnabled(False) self.importImage = QPushButton("New Image", self) self.importImage.clicked.connect(self.file_open) self.lengthButton = QPushButton("Measure Length", self) self.lengthButton.clicked.connect(self.measure_length) self.lengthButton.setEnabled(False) self.lengthButton.setCheckable(True) self.lengthNames = [] self.widthsButton = QPushButton("Measure Widths", self) self.widthsButton.clicked.connect(self.iw.measure_widths) self.widthsButton.setEnabled(False) self.widthsButton.setCheckable(True) self.areaButton = QPushButton("Measure Area", self) self.areaButton.clicked.connect(self.measure_area) self.areaButton.setEnabled(False) self.areaButton.setCheckable(True) self.areaNames = [] self.angleButton = QPushButton("Measure Angle", self) self.angleButton.clicked.connect(self.measure_angle) self.angleButton.setEnabled(False) self.angleButton.setCheckable(True) self.angleNames = [] shortcut_polyClose = QShortcut(QtGui.QKeySequence(QtCore.Qt.Key.Key_Tab), self) shortcut_polyClose.activated.connect(self.iw.polyClose) self.undoButton = QPushButton("Undo", self) self.undoButton.clicked.connect(self.undo) self.undoButton.setEnabled(False) shortcut_undo = QShortcut(QtGui.QKeySequence('Ctrl+Z'), self) shortcut_undo.activated.connect(self.undo) self.bezier = QRadioButton("Bezier fit", self) self.bezier.setEnabled(True) self.bezier.setChecked(True) #self.bezier.toggled.connect(self.onClicked) self.piecewise = QRadioButton("Piecewise", self) self.statusbar = self.statusBar() self.statusbar.showMessage('Select new image to begin') self.tb = QToolBar('Toolbar') #self.addToolBar(QtCore.Qt.RightToolBarArea,self.tb) spacer = QWidget(self) spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self.tb.addWidget(spacer) self.addToolBar(self.tb) self.tb.addWidget(self.importImage) self.tb.addWidget(self.exportButton) self.tb.addWidget(self.lengthButton) self.tb.addWidget(self.widthsButton) self.tb.addWidget(self.areaButton) self.tb.addWidget(self.angleButton) self.tb.addWidget(self.undoButton) self.tb.addWidget(self.bezier) self.tb.addWidget(self.piecewise)