def __init__(self, x, y, w, h): QWidget.__init__(self) self.x = x self.y = y self.w = w self.h = h self.title = Box.title start_position = (self.x, self.y, self.w, self.h) self.setGeometry(*start_position) width = self.w - self.x height = self.h - self.y self.resize(width, height) tb = QtWidgets.QToolBar self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setAttribute(Qt.WA_TranslucentBackground) layout = QtWidgets.QHBoxLayout(self) frame = QFrame(self) # frame.setFrameShape(QFrame.StyledPanel) frame.setFrameShape(QFrame.WinPanel) frame.setLineWidth(.1) layout.addWidget(frame) self.show()
def createSBoard(self): wid = QFrame(self) wid.setFrameStyle(QFrame.Box) wid.setLineWidth(2) gridlayout = QGridLayout() gridlayout.setSpacing(0) label_list = [] for i in range(3): for j in range(3): #label_list.append(QPushButton("{},{}".format(i,j),self)) qcb = QComboBox(self) qcb.addItems([str(i) for i in range(1, 10)]) label_list.append(qcb) label_list[-1].setFixedSize(50, 50) #label_list[-1].setAlignment(Qt.AlignCenter) #label_list[-1].setFrameStyle(QFrame.Box) #label_list[-1].setLineWidth(1) gridlayout.addWidget(label_list[-1], i, j) wid.setLayout(gridlayout) return wid
class DataBrowserMain(QWidget): sliceUpdated = Signal(int, int, int, int) def __init__(self, parent): super(DataBrowserMain, self).__init__(parent) # data import self.brkraw_obj = self.parent().brkraw_obj self.selectedScan = None self.selectedScanTR = None self.set_viewer_frame() self.set_controller_frame() self.set_gridlayouts() self.set_font() # self.set_palette() # TODO self.set_size() self.set_objectnames() self.set_texts() self.ratio_container = [] self.init_connection() self.inactivate_widgets() # Inactivate during startup def init_connection(self): self.parent().dataSelected.connect( self.selectScanEvent) # run selectScanEvent when data selected self.event_timer = QTimer() self.event_timer.timeout.connect(self.sliceUpdateEvent) # self.sliceUpdated.connect(self.updateImage) self.xaxis_slider.valueChanged.connect(self.xaxis_spinbox.setValue) self.xaxis_spinbox.valueChanged.connect(self.xaxis_slider.setValue) self.yaxis_slider.valueChanged.connect(self.yaxis_spinbox.setValue) self.yaxis_spinbox.valueChanged.connect(self.yaxis_slider.setValue) self.zaxis_slider.valueChanged.connect(self.zaxis_spinbox.setValue) self.zaxis_spinbox.valueChanged.connect(self.zaxis_slider.setValue) self.frame_slider.valueChanged.connect(self.frame_spinbox.setValue) self.frame_spinbox.valueChanged.connect(self.frame_slider.setValue) self.axial_view.pointed.connect(self.axialview_pointing_event) self.sagittal_view.pointed.connect(self.sagittalview_pointing_event) self.coronal_view.pointed.connect(self.coronalview_pointing_event) self.connect_sliders_to_update() def sagittalview_pointing_event(self, pos_x, pos_y, meta): max_x = self.yaxis_slider.maximum() max_y = self.zaxis_slider.maximum() # print(pos_x, pos_y, max_x, max_y) self.yaxis_slider.setValue(int(max_x * pos_x)) self.zaxis_slider.setValue(max_y - int(max_y * pos_y)) # print(int(max_x * pos_x), int(max_y * pos_y)) def axialview_pointing_event(self, pos_x, pos_y, meta): max_x = self.yaxis_slider.maximum() max_y = self.xaxis_slider.maximum() # print(pos_x, pos_y, max_x, max_y) self.yaxis_slider.setValue(int(max_x * pos_x)) self.xaxis_slider.setValue(int(max_y * pos_y)) # print(int(max_x * pos_x), int(max_y * pos_y)) def coronalview_pointing_event(self, pos_x, pos_y, meta): max_x = self.xaxis_slider.maximum() max_y = self.zaxis_slider.maximum() # print(pos_x, pos_y, max_x, max_y) self.xaxis_slider.setValue(int(max_x * pos_x)) self.zaxis_slider.setValue(max_y - int(max_y * pos_y)) # print(int(max_x * pos_x), int(max_y * pos_y)) def sliderChangeEvent(self): self.event_timer.start(10) def sliceUpdateEvent(self): # This will executed only when timer timeout x = self.xaxis_slider.value() y = self.yaxis_slider.value() z = self.zaxis_slider.value() t = self.frame_slider.value() self.sliceUpdated.emit(x, y, z, t) self.event_timer.stop() @staticmethod def slice_data(dataobj, slice_orient, slice_num): if slice_orient == 'axial': sliced_data = dataobj[:, :, slice_num] elif slice_orient == 'sagittal': sliced_data = dataobj[:, slice_num, ::-1] elif slice_orient == 'coronal': sliced_data = dataobj[slice_num, :, ::-1] else: popup_error_dialog(UnexpectedError.message) return None return sliced_data def updateImage(self, x, y, z, frame): if len(self.selectedScan.shape) == 4: dataobj = self.selectedScan[:, :, :, frame] else: dataobj = self.selectedScan[...] data_xy = self.slice_data(dataobj, 'axial', z) data_yz = self.slice_data(dataobj, 'sagittal', x) data_xz = self.slice_data(dataobj, 'coronal', y) ratio_xy, ratio_yz, ratio_xz = self.ratio_container # ratio_xy, ratio_yz, ratio_xz = 1, 1, 1 qm_xy = convert_arr2qpixmap(data_xy, ratio_xy) qm_yz = convert_arr2qpixmap(data_yz, ratio_yz) qm_xz = convert_arr2qpixmap(data_xz, ratio_xz) self.axial_view.setPixmap(qm_xy) self.sagittal_view.setPixmap(qm_yz) self.coronal_view.setPixmap(qm_xz) def selectScanEvent(self, delivery_package: list): """ this event is occurring when a scan selected on scanlist """ self.axial_view.setEnabled(True) self.sagittal_view.setEnabled(True) self.coronal_view.setEnabled(True) self.selectedScan, affine, resol, self.selectedScanTR, is_localizer = delivery_package self.selectedScanTR /= 1000 from slfmri.imgman import reorient_to_ras, determine_slice_plane slice_plane_ref = dict(sagittal=0, coronal=1, axial=2) if is_localizer: img_container = dict() for i, aff in enumerate(affine): size = config.get('ImageViewer', 'size') data = self.selectedScan[..., i] slice_plane = determine_slice_plane(2, aff, resol) ras_data, ras_resol = reorient_to_ras(data[:, :, np.newaxis], aff, resol) slice_axis = slice_plane_ref[slice_plane] ras_data = ras_data.mean(slice_axis) ras_resol = np.delete(ras_resol, slice_axis) qpixmap = convert_arr2qpixmap(ras_data, ras_resol, size) img_container[slice_plane] = qpixmap self.update_axisview(img_container) else: # other than localizer self.init_data(self.selectedScan) matrix_size = np.asarray(self.selectedScan.shape) resol = np.asarray(resol) fov = matrix_size[:3] * resol self.ratio_container = [ fov[0] / fov[1], fov[1] / fov[2], fov[0] / fov[2] ] # reset value init_x, init_y, init_z = (np.asarray(self.selectedScan.shape[:3]) / 2.0).astype(int) init_f = 0 self.disconnect_sliders_to_update() self.xaxis_slider.setValue(init_x) self.yaxis_slider.setValue(init_y) self.zaxis_slider.setValue(init_z) self.frame_slider.setValue(init_f) self.connect_sliders_to_update() self.updateImage(init_x, init_y, init_z, init_f) def connect_sliders_to_update(self): # connect to check slice update self.xaxis_slider.valueChanged.connect(self.sliderChangeEvent) self.yaxis_slider.valueChanged.connect(self.sliderChangeEvent) self.zaxis_slider.valueChanged.connect(self.sliderChangeEvent) self.frame_slider.valueChanged.connect(self.sliderChangeEvent) def disconnect_sliders_to_update(self): # disconnect to check slice update self.xaxis_slider.valueChanged.disconnect(self.sliderChangeEvent) self.yaxis_slider.valueChanged.disconnect(self.sliderChangeEvent) self.zaxis_slider.valueChanged.disconnect(self.sliderChangeEvent) self.frame_slider.valueChanged.disconnect(self.sliderChangeEvent) def init_data(self, dataobj): self.slicecontrol_pane.setEnabled(True) dim = len(dataobj.shape) if dim == 3: size_x, size_y, size_z = dataobj.shape size_frame = None elif dim == 4: size_x, size_y, size_z, size_frame = dataobj.shape else: popup_error_dialog(UnexpectedError.message) return None # init sliders and spinboxes self.xaxis_slider.setRange(0, size_x - 1) self.yaxis_slider.setRange(0, size_y - 1) self.zaxis_slider.setRange(0, size_z - 1) self.xaxis_spinbox.setRange(0, size_x - 1) self.yaxis_spinbox.setRange(0, size_y - 1) self.zaxis_spinbox.setRange(0, size_z - 1) if dim == 3: self.frame_label.setDisabled(True) self.frame_slider.setDisabled(True) self.frame_spinbox.setDisabled(True) else: self.frame_label.setEnabled(True) self.frame_slider.setEnabled(True) self.frame_spinbox.setEnabled(True) self.frame_slider.setRange(0, size_frame - 1) self.frame_spinbox.setRange(0, size_frame - 1) def update_axisview(self, img_container: dict): for view_plane, pixmap in img_container.items(): if view_plane == 'axial': self.axial_view.setPixmap(pixmap) elif view_plane == 'sagittal': self.sagittal_view.setPixmap(pixmap) else: self.coronal_view.setPixmap(pixmap) def inactivate_widgets(self): self.slicecontrol_pane.setDisabled(True) self.graph_frame.setDisabled(True) def set_navigationmode(self): # mouse click will navigate slice. pass def set_drawingmode(self): # roi drawing function pass def mask_data_handler(self): # mask later handler pass def slider_event_related(self): # slider for slicing. pass def set_viewer_frame(self): self.imageframe = QFrame(self) self.axial_view = SliceViewer(self.imageframe) self.axial_view.setDisabled(True) self.sagittal_view = SliceViewer(self.imageframe) self.sagittal_view.setDisabled(True) self.coronal_view = SliceViewer(self.imageframe) self.coronal_view.setDisabled(True) # TODO: Will reactivate these on later version # self.axial_title = QLabel(self.imageframe) # self.coronal_title = QLabel(self.imageframe) # self.sagittal_title = QLabel(self.imageframe) # # self.axialL_label = QLabel(self.imageframe) # self.axialA_label = QLabel(self.imageframe) # self.axialR_label = QLabel(self.imageframe) # self.axialP_label = QLabel(self.imageframe) # # self.sagittalS_label = QLabel(self.imageframe) # self.sagittalA_label = QLabel(self.imageframe) # self.sagittalI_label = QLabel(self.imageframe) # self.sagittalP_label = QLabel(self.imageframe) # # self.coronalL_label = QLabel(self.imageframe) # self.coronalS_label = QLabel(self.imageframe) # self.coronalR_label = QLabel(self.imageframe) # self.coronalI_label = QLabel(self.imageframe) # # self.axial_title.setTextFormat(Qt.MarkdownText) # self.axialL_label.setTextFormat(Qt.MarkdownText) # self.axialA_label.setTextFormat(Qt.MarkdownText) # self.axialR_label.setTextFormat(Qt.MarkdownText) # self.axialP_label.setTextFormat(Qt.MarkdownText) # # self.sagittal_title.setTextFormat(Qt.MarkdownText) # self.sagittalS_label.setTextFormat(Qt.MarkdownText) # self.sagittalA_label.setTextFormat(Qt.MarkdownText) # self.sagittalI_label.setTextFormat(Qt.MarkdownText) # self.sagittalP_label.setTextFormat(Qt.MarkdownText) # # self.coronal_title.setTextFormat(Qt.MarkdownText) # self.coronalL_label.setTextFormat(Qt.MarkdownText) # self.coronalS_label.setTextFormat(Qt.MarkdownText) # self.coronalR_label.setTextFormat(Qt.MarkdownText) # self.coronalI_label.setTextFormat(Qt.MarkdownText) # # self.axial_title.setAlignment(Qt.AlignCenter) # self.axialL_label.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) # self.axialA_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter) # self.axialR_label.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) # self.axialP_label.setAlignment(Qt.AlignHCenter | Qt.AlignTop) # # self.sagittal_title.setAlignment(Qt.AlignCenter) # self.sagittalS_label.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) # self.sagittalA_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter) # self.sagittalI_label.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) # self.sagittalP_label.setAlignment(Qt.AlignHCenter | Qt.AlignTop) # # self.coronal_title.setAlignment(Qt.AlignCenter) # self.coronalL_label.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) # self.coronalS_label.setAlignment(Qt.AlignBottom | Qt.AlignHCenter) # self.coronalR_label.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) # self.coronalI_label.setAlignment(Qt.AlignHCenter | Qt.AlignTop) def set_controller_frame(self): self.controller_frame = QFrame(self) self.slicecontrol_pane = QGroupBox(self.controller_frame) self.frame_spinbox = QSpinBox(self.slicecontrol_pane) self.xaxis_label = QLabel(self.slicecontrol_pane) self.yaxis_label = QLabel(self.slicecontrol_pane) self.zaxis_label = QLabel(self.slicecontrol_pane) self.frame_label = QLabel(self.slicecontrol_pane) self.xaxis_slider = QSlider(self.slicecontrol_pane) self.yaxis_slider = QSlider(self.slicecontrol_pane) self.zaxis_slider = QSlider(self.slicecontrol_pane) self.frame_slider = QSlider(self.slicecontrol_pane) self.xaxis_spinbox = QSpinBox(self.slicecontrol_pane) self.yaxis_spinbox = QSpinBox(self.slicecontrol_pane) self.zaxis_spinbox = QSpinBox(self.slicecontrol_pane) self.graph_frame = QFrame(self) self.graph_view = pg.PlotWidget(self.graph_frame) self.graph_view.setBackground('w') # TODO: Will reactivate these on later version # self.graph_view = QGraphicsView(self.graph_frame) # self.graphcontrol_pane = QGroupBox(self.graph_frame) # self.addmask_button = QPushButton(self.graphcontrol_pane) # self.removemask_button = QPushButton(self.graphcontrol_pane) # self.mask_listview = QListView(self.graphcontrol_pane) # self.savepng_button = QPushButton(self.graphcontrol_pane) # self.savecsv_button = QPushButton(self.graphcontrol_pane) self.axial_view.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.sagittal_view.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.coronal_view.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.xaxis_slider.setOrientation(Qt.Horizontal) self.yaxis_slider.setOrientation(Qt.Horizontal) self.zaxis_slider.setOrientation(Qt.Horizontal) self.frame_slider.setOrientation(Qt.Horizontal) self.slicecontrol_pane.setAlignment(Qt.AlignCenter) self.xaxis_label.setAlignment(Qt.AlignCenter) self.yaxis_label.setAlignment(Qt.AlignCenter) self.zaxis_label.setAlignment(Qt.AlignCenter) self.frame_label.setAlignment(Qt.AlignCenter) # TODO: Will reactivate these on later version # self.graphcontrol_pane.setAlignment(Qt.AlignCenter) def set_size(self): size = int(config.get('ImageViewer', 'size')) self.imageframe.setLineWidth(0) self.axial_view.setMinimumSize(QSize(size, size)) self.axial_view.setMaximumSize(QSize(size, size)) self.axial_view.setLineWidth(0) self.sagittal_view.setMinimumSize(QSize(size, size)) self.sagittal_view.setMaximumSize(QSize(size, size)) self.sagittal_view.setLineWidth(0) self.coronal_view.setMinimumSize(QSize(size, size)) self.coronal_view.setMaximumSize(QSize(size, size)) self.coronal_view.setLineWidth(0) # TODO: Will reactivate these on later version # self.axialL_label.setMinimumSize(QSize(20, 0)) # self.axialA_label.setMinimumSize(QSize(0, 20)) # self.axialR_label.setMinimumSize(QSize(20, 0)) # self.axialP_label.setMinimumSize(QSize(0, 20)) # self.sagittalS_label.setMinimumSize(QSize(20, 0)) # self.sagittalA_label.setMinimumSize(QSize(0, 20)) # self.sagittalI_label.setMinimumSize(QSize(20, 0)) # self.sagittalP_label.setMinimumSize(QSize(0, 20)) # self.coronalL_label.setMinimumSize(QSize(20, 0)) # self.coronalS_label.setMinimumSize(QSize(0, 20)) # self.coronalR_label.setMinimumSize(QSize(20, 0)) # self.coronalI_label.setMinimumSize(QSize(0, 20)) self.controller_frame.setMinimumSize(QSize(300, 300)) self.controller_frame.setMaximumSize(QSize(400, 300)) self.graph_frame.setMinimumSize(QSize(0, 300)) self.graph_frame.setMaximumSize(QSize(4000, 4000)) self.graph_view.setMaximumSize(QSize(4000, 600)) # TODO: Will reactivate these on later version # self.graphcontrol_pane.setMinimumSize(QSize(300, 0)) # self.graphcontrol_pane.setMaximumSize(QSize(300, 4000)) # self.addmask_button.setMinimumSize(QSize(30, 0)) # self.addmask_button.setMaximumSize(QSize(30, 4000)) # self.removemask_button.setMinimumSize(QSize(30, 0)) # self.removemask_button.setMaximumSize(QSize(30, 4000)) def set_font(self): self.arial_8 = QFont() self.arial_8.setFamily(u"Arial") self.arial_8.setPointSize(8) self.setFont(self.arial_8) # TODO: Will reactivate these on later version # self.axial_title.setFont(self.arial_8) # self.coronal_title.setFont(self.arial_8) # self.sagittal_title.setFont(self.arial_8) # self.axialL_label.setFont(self.arial_8) # self.axialA_label.setFont(self.arial_8) # self.axialR_label.setFont(self.arial_8) # self.axialP_label.setFont(self.arial_8) # self.sagittalS_label.setFont(self.arial_8) # self.sagittalA_label.setFont(self.arial_8) # self.sagittalI_label.setFont(self.arial_8) # self.sagittalP_label.setFont(self.arial_8) # self.coronalL_label.setFont(self.arial_8) # self.coronalS_label.setFont(self.arial_8) # self.coronalR_label.setFont(self.arial_8) # self.coronalI_label.setFont(self.arial_8) self.slicecontrol_pane.setFont(self.arial_8) # TODO: Will reactivate these on later version # self.xaxis_label.setFont(self.arial_8) # self.yaxis_label.setFont(self.arial_8) # self.zaxis_label.setFont(self.arial_8) # self.frame_label.setFont(self.arial_8) # self.graphcontrol_pane.setFont(self.arial_8) # self.addmask_button.setFont(self.arial_8) # self.removemask_button.setFont(self.arial_8) # self.savepng_button.setFont(self.arial_8) # self.savecsv_button.setFont(self.arial_8) def set_palette(self): # Brush gray_text = QBrush(QColor(171, 171, 171, 255)) gray_text.setStyle(Qt.SolidPattern) black_background = QBrush(QColor(0, 0, 0, 255)) black_background.setStyle(Qt.SolidPattern) self.orientation_label_palette = QPalette() self.orientation_label_palette.setBrush(QPalette.Active, QPalette.WindowText, gray_text) self.orientation_label_palette.setBrush(QPalette.Inactive, QPalette.WindowText, gray_text) self.orientation_label_palette.setBrush(QPalette.Disabled, QPalette.WindowText, gray_text) self.ortho_viewer_palette = QPalette() self.ortho_viewer_palette.setBrush(QPalette.Active, QPalette.Base, black_background) self.ortho_viewer_palette.setBrush(QPalette.Inactive, QPalette.Base, black_background) self.ortho_viewer_palette.setBrush(QPalette.Disabled, QPalette.Base, black_background) self.axialA_label.setPalette(self.orientation_label_palette) self.axialL_label.setPalette(self.orientation_label_palette) self.axialR_label.setPalette(self.orientation_label_palette) self.axialP_label.setPalette(self.orientation_label_palette) self.axial_view.setPalette(self.ortho_viewer_palette) self.sagittalS_label.setPalette(self.orientation_label_palette) self.sagittalA_label.setPalette(self.orientation_label_palette) self.sagittalI_label.setPalette(self.orientation_label_palette) self.sagittalP_label.setPalette(self.orientation_label_palette) self.sagittal_view.setPalette(self.ortho_viewer_palette) self.coronalL_label.setPalette(self.orientation_label_palette) self.coronalS_label.setPalette(self.orientation_label_palette) self.coronalR_label.setPalette(self.orientation_label_palette) self.coronalI_label.setPalette(self.orientation_label_palette) self.coronal_view.setPalette(self.ortho_viewer_palette) def set_gridlayouts(self): self.axial_gridLayout = QGridLayout() self.coronal_gridLayout = QGridLayout() self.sagittal_gridLayout = QGridLayout() self.imagecont_gridLayout = QGridLayout(self.slicecontrol_pane) self.imageframe_gridLayout = QGridLayout(self.imageframe) # self.graphcontrol_gridLayout = QGridLayout(self.graphcontrol_pane) self.verticalLayout = QVBoxLayout(self.controller_frame) self.horizontalLayout = QHBoxLayout(self.graph_frame) self.main_gridLayout = QGridLayout(self) # TODO: Will reactivate these on later version # self.imageframe_gridLayout.addWidget(self.axial_title, 0, 1, 1, 1) # self.imageframe_gridLayout.addWidget(self.coronal_title, 0, 2, 1, 1) # self.imageframe_gridLayout.addWidget(self.sagittal_title, 0, 0, 1, 1) # self.axial_gridLayout.addWidget(self.axialL_label, 1, 0, 1, 1) # self.axial_gridLayout.addWidget(self.axialA_label, 0, 1, 1, 1) # self.axial_gridLayout.addWidget(self.axialR_label, 1, 2, 1, 1) # self.axial_gridLayout.addWidget(self.axialP_label, 2, 1, 1, 1) self.axial_gridLayout.addWidget(self.axial_view, 1, 1, 1, 1) # self.sagittal_gridLayout.addWidget(self.sagittalS_label, 1, 0, 1, 1) # self.sagittal_gridLayout.addWidget(self.sagittalA_label, 0, 1, 1, 1) # self.sagittal_gridLayout.addWidget(self.sagittalI_label, 1, 2, 1, 1) # self.sagittal_gridLayout.addWidget(self.sagittalP_label, 2, 1, 1, 1) self.sagittal_gridLayout.addWidget(self.sagittal_view, 1, 1, 1, 1) # self.coronal_gridLayout.addWidget(self.coronalL_label, 1, 0, 1, 1) # self.coronal_gridLayout.addWidget(self.coronalS_label, 0, 1, 1, 1) # self.coronal_gridLayout.addWidget(self.coronalR_label, 1, 2, 1, 1) # self.coronal_gridLayout.addWidget(self.coronalI_label, 2, 1, 1, 1) self.coronal_gridLayout.addWidget(self.coronal_view, 1, 1, 1, 1) self.imagecont_gridLayout.addWidget(self.xaxis_label, 0, 0, 1, 1) self.imagecont_gridLayout.addWidget(self.xaxis_slider, 0, 1, 1, 1) self.imagecont_gridLayout.addWidget(self.xaxis_spinbox, 0, 2, 1, 1) self.imagecont_gridLayout.addWidget(self.yaxis_label, 1, 0, 1, 1) self.imagecont_gridLayout.addWidget(self.yaxis_slider, 1, 1, 1, 1) self.imagecont_gridLayout.addWidget(self.yaxis_spinbox, 1, 2, 1, 1) self.imagecont_gridLayout.addWidget(self.zaxis_label, 2, 0, 1, 1) self.imagecont_gridLayout.addWidget(self.zaxis_slider, 2, 1, 1, 1) self.imagecont_gridLayout.addWidget(self.zaxis_spinbox, 2, 2, 1, 1) self.imagecont_gridLayout.addWidget(self.frame_label, 3, 0, 1, 1) self.imagecont_gridLayout.addWidget(self.frame_slider, 3, 1, 1, 1) self.imagecont_gridLayout.addWidget(self.frame_spinbox, 3, 2, 1, 1) self.imageframe_gridLayout.addLayout(self.axial_gridLayout, 1, 1, 1, 1) self.imageframe_gridLayout.addLayout(self.coronal_gridLayout, 1, 2, 1, 1) self.imageframe_gridLayout.addLayout(self.sagittal_gridLayout, 1, 0, 1, 1) # self.graphcontrol_gridLayout.addWidget(self.addmask_button, 3, 0, 1, 1) # self.graphcontrol_gridLayout.addWidget(self.removemask_button, 3, 1, 1, 1) # self.graphcontrol_gridLayout.addWidget(self.mask_listview, 0, 0, 1, 5) # self.graphcontrol_gridLayout.addWidget(self.savepng_button, 3, 4, 1, 1) # self.graphcontrol_gridLayout.addWidget(self.savecsv_button, 3, 3, 1, 1) self.verticalLayout.addWidget(self.slicecontrol_pane) self.horizontalLayout.addWidget(self.graph_view) # self.horizontalLayout.addWidget(self.graphcontrol_pane) self.main_gridLayout.addWidget(self.imageframe, 0, 0, 1, 2) self.main_gridLayout.addWidget(self.controller_frame, 1, 0, 1, 1) self.main_gridLayout.addWidget(self.graph_frame, 1, 1, 1, 1) def set_objectnames(self): self.setObjectName(u"data_browser") self.imageframe.setObjectName(u"image_frame") self.axial_gridLayout.setObjectName(u"axial_gridLayout") self.coronal_gridLayout.setObjectName(u"coronal_gridLayout") self.sagittal_gridLayout.setObjectName(u"sagittal_gridLayout") # TODO: Will reactivate these on later version # self.axial_title.setObjectName(u"axial_label") # self.coronal_title.setObjectName(u"coronal_label") # self.sagittal_title.setObjectName(u"sagittal_label") self.axial_view.setObjectName(u"axial_view") self.sagittal_view.setObjectName(u"sagittal_view") self.coronal_view.setObjectName(u"coronal_view") # self.axialL_label.setObjectName(u"axialL_label") # self.axialR_label.setObjectName(u"axialR_label") # self.axialA_label.setObjectName(u"axialA_label") # self.axialP_label.setObjectName(u"axialP_label") # self.sagittalS_label.setObjectName(u"sagittalS_label") # self.sagittalA_label.setObjectName(u"sagittalA_label") # self.sagittalI_label.setObjectName(u"sagittalI_label") # self.sagittalP_label.setObjectName(u"sagittalP_label") # self.coronalL_label.setObjectName(u"coronalL_label") # self.coronalS_label.setObjectName(u"coronalS_label") # self.coronalR_label.setObjectName(u"coronalR_label") # self.coronalI_label.setObjectName(u"coronalI_label") self.controller_frame.setObjectName(u"controller_frame") self.slicecontrol_pane.setObjectName(u"slicecontrol_pane") self.xaxis_label.setObjectName(u"xaxis_label") self.xaxis_slider.setObjectName(u"xaxis_slider") self.xaxis_spinbox.setObjectName(u"xaxis_spinbox") self.yaxis_label.setObjectName(u"yaxis_label") self.yaxis_slider.setObjectName(u"yaxis_slider") self.yaxis_spinbox.setObjectName(u"yaxis_spinbox") self.zaxis_label.setObjectName(u"zaxis_label") self.zaxis_slider.setObjectName(u"zaxis_slider") self.zaxis_spinbox.setObjectName(u"zaxis_spinbox") self.frame_label.setObjectName(u"frame_label") self.frame_slider.setObjectName(u"frame_slider") self.frame_spinbox.setObjectName(u"frame_spinbox") self.graph_frame.setObjectName(u"graph_frame") self.graph_view.setObjectName(u"graph_view") # TODO: Will reactivate these on later version # self.graphcontrol_pane.setObjectName(u"graphcontrol_pane") # self.addmask_button.setObjectName(u"addmask_button") # self.removemask_button.setObjectName(u"removemask_button") # self.mask_listview.setObjectName(u"mask_listview") # self.savepng_button.setObjectName(u"savepng_button") # self.savecsv_button.setObjectName(u"savecsv_button") self.imagecont_gridLayout.setObjectName(u"imagecont_gridLayout") self.imageframe_gridLayout.setObjectName(u"imageframe_gridLayout") # self.graphcontrol_gridLayout.setObjectName(u"graphcontrol_gridLayout") self.verticalLayout.setObjectName(u"verticalLayout") self.horizontalLayout.setObjectName(u"horizontalLayout") self.main_gridLayout.setObjectName(u"main_gridLayout") QMetaObject.connectSlotsByName(self) def set_texts(self): self.setWindowTitle(u"Data Browser") # TODO: Will reactivate these on later version # self.axial_title.setText(u"**Axial**") # self.coronal_title.setText(u"**Coronal**") # self.sagittal_title.setText(u"**Sagittal**") # self.sagittalS_label.setText(u"**S**") # self.sagittalA_label.setText(u"**A**") # self.sagittalI_label.setText(u"**I**") # self.sagittalP_label.setText(u"**P**") # self.axialL_label.setText(u"**L**") # self.axialA_label.setText(u"**A**") # self.axialR_label.setText(u"**R**") # self.axialP_label.setText( u"**P**") # self.coronalL_label.setText(u"**L**") # self.coronalS_label.setText(u"**S**") # self.coronalR_label.setText(u"**R**") # self.coronalI_label.setText(u"**I**") self.slicecontrol_pane.setTitle(u"Slice Control Pane") self.xaxis_label.setText(u"x") self.yaxis_label.setText(u"y") self.zaxis_label.setText(u"z") self.frame_label.setText(u"Frame") # TODO: Will reactivate these on later version # self.graphcontrol_pane.setTitle(u"Graph Control Pane") # self.addmask_button.setText(u"+") # self.removemask_button.setText(u"-") # self.savepng_button.setText(u"toPNG") # self.savecsv_button.setText(u"toCSV") def plot_timecourse(self, x, y): self.graph_frame.setEnabled(True) self.graph_view.clear() pen = pg.mkPen(color=(255, 0, 0)) if x is None: x = [0] y = [y] self.graph_view.plot(x, y, pen=pen, symbol='o') else: self.graph_view.plot(x, y, pen=pen) def get_coord(self): x = self.xaxis_slider.value() y = self.yaxis_slider.value() z = self.zaxis_slider.value() return (x, y, z)
class PropertyTreeDelegateEditor(QFrame): """A special editor that handles renaming blocks and groups.""" sizeHintChanged = Signal(object) """Emitted when the widget changes sizeHint. Delegate should update it's geometry.""" def __init__(self, parent=None): super().__init__(parent) layout = QVBoxLayout() self.setLayout(layout) self.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) self.setAutoFillBackground(True) self.setFocusPolicy(Qt.StrongFocus) self.setFrameStyle(QFrame.Panel | QFrame.Plain) self._fallback_text = None self._experiment = None self.line_edit = QLineEdit() self.line_edit.setFrame(False) self.message_label = QLabel() self.message_label.hide() # Divider line self.divider_line = QFrame() self.divider_line.setFrameShape(QFrame.HLine) self.divider_line.setFrameShadow(QFrame.Plain) self.divider_line.setLineWidth(1) layout.addWidget(self.line_edit) layout.addWidget(self.divider_line) layout.addWidget(self.message_label) self.line_edit.textChanged.connect(self._updateMessage) def experiment(self): return self._experiment def setExperiment(self, ex): self._experiment = ex def fallbackText(self): return self._fallback_text def text(self): """Get the current text value of the editor widget. If editing has not been finished succesfully, returns fallbackText(). """ (text_ok, _) = self.experiment().checkName(self.line_edit.text()) if text_ok: return self.line_edit.text() else: return self.fallbackText() def setFallbackText(self, text): """Set the fallback text value to be used if the editing was not succesfully finished. The text() method returns this value or the line_edit text. """ self._fallback_text = text def setText(self, text): """Set currently editable text. Equivalent to self.line_edit.setText.""" self.line_edit.setText(text) def _updateMessage(self): """Update the displayed message in response to changed text.""" if self.line_edit.text() == self.fallbackText(): # Perform no check text_ok = True else: (text_ok, reason) = self.experiment().checkName(self.line_edit.text()) if text_ok: self.message_label.hide() self.divider_line.hide() else: self.message_label.setText(reason) self.message_label.show() self.divider_line.show() self.sizeHintChanged.emit(self) def focusInEvent(self, event): super().focusInEvent(event) self.line_edit.setFocus()
class Card(QWidget): def __init__(self, parent: QWidget, card_details: Dict[str, Any]): super().__init__() if parent is not None: self.setParent(parent) self.model = create_card(card_details) self.setupUi() def get_card_background_colour(self): if isinstance(self.model, SpellCard): return QColor(CardColours[CardType.SPELL]) elif isinstance(self.model, TrapCard): return QColor(CardColours[CardType.TRAP]) else: pass def setupUi(self): self.main_layout = QVBoxLayout() self.name_attr_layout = QHBoxLayout() self.name_label = QLabel(self.model.name) font = self.name_label.font() font.setBold(True) font.setCapitalization(QFont.AllUppercase) font.setPointSize(12) self.name_label.setFont(font) self.name_label.setMargin(5) pixmap = get_attr_icon(self.model.attribute) self.attr_icon = QLabel() self.attr_icon.setPixmap(pixmap) self.attr_icon.setAlignment(Qt.AlignRight) self.name_attr_layout.addWidget(self.name_label) self.name_attr_layout.addWidget(self.attr_icon) self.main_layout.addLayout(self.name_attr_layout) self.level_layout = QHBoxLayout() self.main_layout.addLayout(self.level_layout) self.picture_frame = QFrame() self.picture_frame.setFixedSize(250, 250) self.picture_frame.setFrameStyle(QFrame.Box | QFrame.Plain) self.picture_frame.setFrameShadow(QFrame.Shadow.Raised) self.picture_frame.setLineWidth(1) self.picture_frame.setContentsMargins(0, 0, 0, 0) self.picture_frame.setLayout(QGridLayout()) self.image_holder = QLabel() pixmap = self._get_card_image() self.image_holder.setPixmap( pixmap.scaled( self.picture_frame.width(), self.picture_frame.height(), Qt.KeepAspectRatio, )) self.picture_frame.layout().addWidget(self.image_holder) self.main_layout.addWidget(self.picture_frame) # Card sets here? self.desc_group_box = QGroupBox() self.desc_group_box.setMaximumWidth(250) self.set_up_group_box() self.main_layout.addWidget(self.desc_group_box) self.id_label = QLabel(self.model.id) self.id_label.setAlignment(Qt.AlignLeft) self.id_label.setMargin(5) self.main_layout.addWidget(self.id_label) self.setLayout(self.main_layout) pal = QPalette() pal.setColor(QPalette.Background, self.get_card_background_colour()) self.setAutoFillBackground(True) self.setPalette(pal) def _get_card_image(self): image_name = self.model.img_url.split("/")[-1] if os.path.exists(self.get_image_path(image_name)): image = Image.open(self.get_image_path(image_name)) else: image_data = requests.get(self.model.img_url).content image = Image.open(BytesIO(image_data)) image.save(self.get_image_path(image_name)) image = image.crop((44, 106, 380, 438)) # this is about correct data = image.tobytes("raw", "RGB") qimage = QImage(data, image.size[0], image.size[1], QImage.Format_RGB888) pixmap = QPixmap.fromImage(qimage) return pixmap def get_image_path(self, image_name): return os.path.join(os.getcwd(), "images", image_name) def set_up_group_box(self): self.desc_group_box.setLayout(QVBoxLayout()) self.desc_label = QLabel(self.model.desc) self.desc_label.setWordWrap(True) self.desc_group_box.layout().addWidget(self.desc_label) if isinstance(self.model, (MonsterCard)): self.desc_group_box.setTitle(self.get_group_box_title()) line = QFrame() line.setFrameShape((QFrame.HLine)) line.setFrameShadow(QFrame.Sunken) self.desc_group_box.layout().addWidget(line) label = QLabel( f"ATK/{self.model.attack} DEF/{self.model.defence}") label.setAlignment(Qt.AlignRight) self.desc_group_box.layout().addWidget(label) def get_group_box_title(self): return "[TEST/TEST]"
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) #window setup resolution = QDesktopWidget().screenGeometry() self.screen_w = resolution.width() self.screen_h = resolution.height() self.setGeometry(0, 0, 650, 550) self.setWindowTitle('MARS_v1_8') self.setWindowIcon(QIcon('icons/mouse.png')) self.queue = Queue() self.queue_list = [] self.str_proc = '' self.fname = '' #center window qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) #adjust size self.resize(self.screen_w / 2, self.screen_h / 2) self.Menu() self.Layout() central_widget = QWidget() central_widget.setLayout(self.main_layout) self.setCentralWidget(central_widget) def Menu(self): #this creates an action exit, a shortcut and status tip exitAction = QAction(QIcon('icons/exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) openFile = QAction(QIcon('icons/open.png'), '&Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.browse) runAction = QAction(QIcon('icons/run.png'), '&Run', self) runAction.setShortcut('Ctrl+R') runAction.setStatusTip('Run Mars') runAction.triggered.connect(self.run_event) resetAction = QAction(QIcon('icons/reset.png'), '&Reset', self) resetAction.setShortcut('Ctrl+X') resetAction.setStatusTip('Reset Mars') resetAction.triggered.connect(self.reset) #create status bar to show tooltip statusbar = QStatusBar(self) self.setStatusBar(statusbar) #create menu self.menu_File = QMenu('&File', self) self.menuBar().addMenu(self.menu_File) self.menu_File.addAction(openFile) self.menu_File.addAction(runAction) self.menu_File.addAction(resetAction) self.menu_File.addSeparator() self.menu_File.addAction(exitAction) #create toolbar self.toolbar = QToolBar("Toolbar", self) self.toolbar.addAction(openFile) self.toolbar.addAction(runAction) self.toolbar.addAction(resetAction) self.toolbar.addSeparator() # self.toolbar.move(5, 5) self.toolbar2 = QToolBar("ToolbarExit", self) self.toolbar2.addAction(exitAction) self.toto = QFrame(self) self.toto.setFrameShape(QFrame.HLine) self.toto.setFrameShadow(QFrame.Sunken) self.toto.setLineWidth(2) def Layout(self): #LAYOUT self.select_video = QLabel(self) self.select_video.setText("Folder Selected:") self.select_video.setVisible(False) self.browse_btn = QPushButton("Browse", self) self.browse_btn.setStatusTip(" Browse Folder") # self.browse_btn.setStyleSheet("background-color: rgb(186, 186, 186); border-radius: 15px;border-style: solid;border-width: 2px;border-color: black;"); self.browse_btn.clicked.connect(self.browse) self.VideoName = QLabel(self) self.todo = QLabel(self) self.todo.setText("What do you want to do?") self.todo.setVisible(False) ## Various checkboxes for activities to perform within MARS. self.doPose = False self.pose_chbox = QCheckBox('[Pose]', self) self.pose_chbox.stateChanged.connect(self.checkDoPose) self.pose_chbox.setVisible(False) self.doFeats = False self.feat_chbox = QCheckBox('[Features]', self) self.feat_chbox.stateChanged.connect(self.checkDoFeat) self.feat_chbox.setVisible(False) self.doActions = False self.actions_chbox = QCheckBox('[Classify Actions]', self) self.actions_chbox.stateChanged.connect(self.checkDoActions) self.actions_chbox.setVisible(False) # self.ddlist_label = QLabel(self) # self.ddlist_label.setText("Classifier:") # self.ddlist_label.move(200, 150) # self.ddlist_label.resize(150, 30) # self.ddlist_label.setVisible(False) # # self.ddlist = QComboBox(self) # self.ddlist.setVisible(False) # self.ddlist.setStatusTip('Choose the classifier you\'d like to use.') # self.ddlist.move(220, 120) # self.ddlist.resize(150, 50) # self.ddlist.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.doVideo = False self.video_chbox = QCheckBox('[Produce Video]', self) self.video_chbox.stateChanged.connect(self.checkDoVideo) self.video_chbox.setVisible(False) self.doOverwrite = False self.overwrite_chbox = QCheckBox('[Overwrite]', self) self.overwrite_chbox.setStyleSheet("background-color: #ff7a7a") self.overwrite_chbox.stateChanged.connect(self.checkDoOverwrite) self.overwrite_chbox.setVisible(False) ## Checkboxes that pick which view(s) to use, as well as the internal values they represent. self.doTop = False self.top_chbox = QCheckBox('[Top]', self) self.top_chbox.stateChanged.connect(self.checkDoTop) self.top_chbox.setVisible(False) self.doToppcf = False # self.toppcf_chbox = QCheckBox('[Top (w/ Front pixel features)]', self) # self.toppcf_chbox.stateChanged.connect(self.checkDoToppcf) # self.toppcf_chbox.setVisible(False) self.doFront = False self.front_chbox = QCheckBox('[Front]', self) self.front_chbox.stateChanged.connect(self.checkDoFront) self.front_chbox.setVisible(False) # Button to run MARS. self.run_mars = QPushButton("[Run MARS]", self) self.run_mars.setVisible(False) self.run_mars.setStatusTip('Run detection and actions classification') self.run_mars.setStyleSheet( "background-color: rgb(142, 229, 171); border-radius: 15px;") self.run_mars.clicked.connect(self.run_event) # Button to reset the form for MARS. self.reset_btn = QPushButton("[Reset]", self) self.reset_btn.setVisible(False) self.reset_btn.setStatusTip('Reset buttons') self.reset_btn.setStyleSheet( "background-color: rgb(229, 200, 142);border-radius: 15px") self.reset_btn.clicked.connect(self.reset) # Button for adding things to queue. self.add2queue_btn = QPushButton("[Enqueue]", self) self.add2queue_btn.setVisible(False) self.add2queue_btn.setStyleSheet( "background-color: rgb(216,191,216);border-radius: 50px") self.add2queue_btn.clicked.connect(self.addToQueue) self.progress = QLabel(self) self.progress.setVisible(True) # Progress bar above the global progress, shows the progress on the current task. self.progbar = QProgressBar(self) self.progbar.setStyleSheet( "background-color: #FFA07A; border: 3px solid #000000;") self.progbar.setVisible(True) self.progbar.setAlignment(QtCore.Qt.AlignCenter) # Label for progress bar. self.progbar_label = QLabel(self) self.progbar_label.setText("Current Task Progress:") # Big progress bar at the bottom. Global progress. self.big_progbar = QProgressBar(self) self.big_progbar.setVisible(True) self.big_progbar.setStyleSheet( "background-color: #add8e6; border: 3px solid #FFFFFF;") self.big_progbar.setAlignment(QtCore.Qt.AlignCenter) # Label for big progress bar. self.big_progbar_label = QLabel(self) self.big_progbar_label.setText("Global Video Progress:") # Layout for the browsing span. self.button_layout = QHBoxLayout() self.button_layout.addWidget(self.browse_btn) self.button_layout.addWidget(self.select_video) self.button_layout.addWidget(self.VideoName) self.button_layout.addWidget(self.add2queue_btn) self.button_layout.addStretch(0.5) # Layout for the menu at the top. self.menu_layout = QHBoxLayout() self.menu_layout.addWidget(self.toolbar) self.menu_layout.addStretch() self.menu_layout.addWidget(self.toolbar2) # Layout for the view selection (Top, Toppcf, Front) self.view_layout = QHBoxLayout() self.view_layout.addWidget(self.top_chbox) # self.view_layout.addWidget(self.toppcf_chbox) self.view_layout.addWidget(self.front_chbox) self.view_layout.addStretch() # Layout for the checkboxes. self.chbox_layout = QHBoxLayout() self.chbox_layout.setSpacing(10) self.chbox_layout.addWidget(self.pose_chbox) self.chbox_layout.addWidget(self.feat_chbox) self.chbox_layout.addWidget(self.actions_chbox) self.chbox_layout.addWidget(self.video_chbox) self.chbox_layout.addWidget(self.overwrite_chbox) self.chbox_layout.addStretch(1) # Layout for the activity buttons, RUN and RESET. self.active_layout = QHBoxLayout() self.active_layout.addWidget(self.run_mars, stretch=2) self.active_layout.addWidget(self.reset_btn, stretch=1) # # Layout for the task progress bar. # self.task_progbar_layout = QtGui.QHBoxLayout() # self.task_progbar_layout.addWidget(self.progbar_label) # self.task_progbar_layout.addWidget(self.progbar, stretch=1) # # # Layout for the global progress bar. # self.global_progbar_layout = QtGui.QHBoxLayout() # self.global_progbar_layout.addWidget(self.big_progbar_label) # self.global_progbar_layout.addWidget(self.big_progbar) # Layout for the labels, to get ther vertically-aligned. self.progbar_label_layout = QVBoxLayout() self.progbar_label_layout.addWidget(self.progbar_label) self.progbar_label_layout.addWidget(self.big_progbar_label) # Layout for the progress bars themselves, to get them vertically-aligned. self.progbar_bar_layout = QVBoxLayout() self.progbar_bar_layout.addWidget(self.progbar) self.progbar_bar_layout.addWidget(self.big_progbar) # Layout for the combined progress bars and labels. self.progbar_layout = QHBoxLayout() self.progbar_layout.addLayout(self.progbar_label_layout) self.progbar_layout.addLayout(self.progbar_bar_layout, stretch=1) # This layout puts everything on the screen. self.main_layout = QVBoxLayout() self.main_layout.addLayout(self.menu_layout) self.main_layout.addWidget(self.toto) self.main_layout.addLayout(self.button_layout) self.main_layout.addWidget(self.todo) self.main_layout.addLayout(self.view_layout) self.main_layout.addLayout(self.chbox_layout) self.main_layout.addLayout(self.active_layout) self.main_layout.addWidget(self.progress) self.main_layout.addStretch() self.main_layout.addLayout(self.progbar_layout) # self.main_layout.addLayout(self.task_progbar_layout) # self.main_layout.addLayout(self.global_progbar_layout) def addToQueue(self): self.queue.put(self.fname) self.queue_list.append(self.fname) barMsg = self.fname + " added to the list!\n" msg = barMsg self.updateProgess(barMsg, msg) def browse(self): # sender = self.sender() dialog = QFileDialog() dialog.setFileMode(QFileDialog.Directory) dialog.setOption(QFileDialog.ShowDirsOnly) if os.path.exists(self.fname): dir_to_use = self.fname else: dir_to_use = os.path.curdir self.fname = dialog.getExistingDirectory(self, 'Choose Directory', dir_to_use) self.statusBar().showMessage(self.fname + ' selected ') if os.path.exists(self.fname) and os.path.isdir( self.fname) and self.fname != '': files = os.listdir(self.fname) seq_files = [ f for f in files if f.endswith('.seq') or f.endswith('.avi') or f.endswith('.mp4') or f.endswith('.mpg') ] self.vid_name = self.fname.split('/')[-1] #if len(seq_files) >= 2: self.VideoName.setText(self.fname) self.todo.setVisible(True) self.select_video.setVisible(True) self.add2queue_btn.setVisible(True) # self.ddlist_label.setVisible(True) # self.ddlist.setVisible(True) self.pose_chbox.setVisible(True) self.feat_chbox.setVisible(True) self.actions_chbox.setVisible(True) self.video_chbox.setVisible(True) self.front_chbox.setVisible(True) self.top_chbox.setVisible(True) # self.toppcf_chbox.setVisible(True) self.run_mars.setVisible(True) self.reset_btn.setVisible(True) self.overwrite_chbox.setVisible(True) #else: # QMessageBox.information(self, "Not all needed files exists", "Select a folder containing .seq files!") else: QMessageBox.information( self, " Wrong file selected", "No compatible movie files found! Supported formats: .seq, .avi, .mp4, .mpg" ) self.fname = dir_to_use def checkDoPose(self, state): self.doPose = (state == QtCore.Qt.Checked) def checkDoFeat(self, state): self.doFeats = (state == QtCore.Qt.Checked) def checkDoActions(self, state): self.doActions = (state == QtCore.Qt.Checked) def checkDoVideo(self, state): self.doVideo = (state == QtCore.Qt.Checked) def checkDoOverwrite(self, state): self.doOverwrite = (state == QtCore.Qt.Checked) def checkDoTop(self, state): self.doTop = (state == QtCore.Qt.Checked) # if self.doTop: # self.ddlist.addItem("top mlp") # self.ddlist.addItem("top xgb") # self.ddlist.addItem("top mlp wnd") # self.ddlist.addItem("top xgb wnd") # else: # self.ddlist.clear() def checkDoToppcf(self, state): self.doToppcf = (state == QtCore.Qt.Checked) # if self.doToppcf: # self.ddlist.addItem("top pcf mlp") # self.ddlist.addItem("top pcf xgb") # self.ddlist.addItem("top pcf mlp wnd") # self.ddlist.addItem("top pcf xgb wnd") # else: # self.ddlist.clear() def checkDoFront(self, state): self.doFront = (state == QtCore.Qt.Checked) # if self.doFront: # self.ddlist.addItem("topfront mlp") # self.ddlist.addItem("topfront xgb") # self.ddlist.addItem("topfront mlp wnd") # self.ddlist.addItem("topfront xgb wnd") # else: # self.ddlist.clear() def reset(self): todo = [self.doPose, self.doFeats, self.doActions] # if not self.todo.isVisible() or sum(todo)== 0: # QMessageBox.information(self, "Reset", "Nothing to reset") # else: self.doPose = False self.doFeats = False self.doActions = False self.doVideo = False self.doOverwrite = False self.doFront = False self.doTop = False self.doToppcf = False self.pose_chbox.setCheckState(QtCore.Qt.Unchecked) self.feat_chbox.setCheckState(QtCore.Qt.Unchecked) self.actions_chbox.setCheckState(QtCore.Qt.Unchecked) self.video_chbox.setCheckState(QtCore.Qt.Unchecked) self.overwrite_chbox.setCheckState(QtCore.Qt.Unchecked) self.front_chbox.setCheckState(QtCore.Qt.Unchecked) self.top_chbox.setCheckState(QtCore.Qt.Unchecked) # self.toppcf_chbox.setCheckState(QtCore.Qt.Unchecked) self.str_proc = '' self.progress.setText(self.str_proc) self.VideoName.setText('') self.fname = '' self.statusBar().showMessage('') self.changeEnable_wdj(True) self.clearProgress() def changeEnable_wdj(self, b=False): self.run_mars.setEnabled(b) self.reset_btn.setEnabled(b) self.pose_chbox.setEnabled(b) self.feat_chbox.setEnabled(b) self.actions_chbox.setEnabled(b) self.video_chbox.setEnabled(b) self.overwrite_chbox.setEnabled(b) # self.add2queue_btn.setEnabled(b) # self.ddlist.setEnabled(b) self.front_chbox.setEnabled(b) self.top_chbox.setEnabled(b) # self.toppcf_chbox.setEnabled(b) # def stop_event(self): # print('Stopped') # # self.genericThread.stop() # # self.genericThread.wait() # self.statusBar().showMessage('Stopped processing') # self.changeEnable_wdj(True) # # self.stop_run.setVisible(False) def update_thread(self, prog): if prog == 1: print('Thread pose done') if prog == 2: print('Thread features done') if prog == 3: print('Thread actions done') if prog == 4: print('Thread video done') def thread_done(self): print('Thread ended') # self.changeEnable_wdj(True) # self.stop_run.setVisible(False) def queue_done(self): print('Queue ended') self.changeEnable_wdj(True) def updateProgess(self, barMsg, msg): self.statusBar().showMessage(barMsg) self.str_proc += msg self.progress.setText(self.str_proc) self.scrollText() def updateProgbar(self, value, set_max): if set_max != 0: self.progbar.setMaximum(set_max) self.progbar.setValue(value) def updateBigProgbar(self, value, set_max): if set_max != 0: self.big_progbar.setMaximum(set_max) self.big_progbar.setValue(value) def clearProgress(self): self.str_proc = 'Console cleared. \n' self.progress.setText(self.str_proc) self.resize(self.screen_w / 2, self.screen_h / 2) # self.adjustSize() # self.changeEnable_wdj(True) def scrollText(self): MAX_LINES = 20 all_lines = self.str_proc.splitlines() if len(all_lines) > MAX_LINES: renewed_lines = all_lines[-MAX_LINES:] self.str_proc = '\n'.join(renewed_lines) + '\n' def run_event(self): todo = [self.doPose, self.doFeats, self.doActions, self.doVideo] if not self.todo.isVisible(): QMessageBox.information(self, "Empty selection", "Select a folder to process.") elif sum(todo) == 0: QMessageBox.information(self, "Empty selection", "Select at least one task to do.") else: self.str_proc = '' self.progress.setVisible(True) self.genericThread = GenericThread(self.doPose, self.doFeats, self.doActions, self.doVideo, self.doOverwrite, self.doFront, self.doTop, self.doToppcf, self.queue, self.fname) self.genericThread.update_th.connect(self.update_thread) self.genericThread.done_th.connect(self.thread_done) self.genericThread.done_queue.connect(self.queue_done) self.genericThread.update_progbar_sig.connect(self.updateProgbar) self.genericThread.update_big_progbar_sig.connect( self.updateBigProgbar) self.genericThread.update_progress.connect(self.updateProgess) # self.genericThread.classifier_to_use = self.ddlist.currentText() self.genericThread.clear_sig.connect(self.clearProgress) self.genericThread.start() # self.stop_run.setVisible(True) self.changeEnable_wdj(False)