Пример #1
0
    def populate_attrs(self, attr_dict=None, editable_values=False):
        """Populate attribute for currently selected group."""
        self.tableAttributes.blockSignals(
            True)  # block udpate signals for auto-filled forms
        self.tableAttributes.setRowCount(0)
        self.tableAttributes.setColumnCount(2)
        self.tableAttributes.setSortingEnabled(False)

        if attr_dict:
            for num, key in enumerate(attr_dict):
                self.tableAttributes.insertRow(self.tableAttributes.rowCount())
                key_item = QTableWidgetItem(key)
                key_item.setFlags(QtCore.Qt.ItemFlag.ItemIsSelectable
                                  | QtCore.Qt.ItemFlag.ItemIsEnabled)
                self.tableAttributes.setItem(num, 0, key_item)

                val_item = QTableWidgetItem(str(attr_dict[key]))
                if editable_values:
                    val_item.setFlags(QtCore.Qt.ItemFlag.ItemIsSelectable
                                      | QtCore.Qt.ItemFlag.ItemIsEditable
                                      | QtCore.Qt.ItemFlag.ItemIsEnabled)
                else:
                    val_item.setFlags(QtCore.Qt.ItemFlag.ItemIsSelectable
                                      | QtCore.Qt.ItemFlag.ItemIsEnabled)
                self.tableAttributes.setItem(num, 1, val_item)

        self.tableAttributes.blockSignals(False)
Пример #2
0
 def tableupdate(self,dir, pic_num, pushbtn  ) -> None:
     self.qtablewidget.setRowCount(self.current_index+1)  #设置行
     diritem = QTableWidgetItem(str(dir))
     self.qtablewidget.setItem( self.current_index, 0, diritem)
     pic_numitem = QTableWidgetItem(str(pic_num))
     self.qtablewidget.setItem( self.current_index, 1, pic_numitem)
     self.qtablewidget.setCellWidget( self.current_index, 2, pushbtn )
     self.current_index += 1
Пример #3
0
def makeTableItem(text):
    text = str(text)
    item = QTableWidgetItem()
    item.setText(text)
    item.setFlags(Qt.ItemFlags.ItemIsEnabled)
    item.setFlags(Qt.ItemFlags.ItemIsSelectable)
    return item
Пример #4
0
 def add_table_value(self):
     item = self.sender().item(self.sender().currentRow(),
                               self.sender().currentColumn()).text()
     if 0 <= self.sender().currentColumn() <= 1:
         if not item.isdigit() or int(item) == 0:
             self.sender().blockSignals(True)
             self.sender().setItem(self.sender().currentRow(),
                                   self.sender().currentColumn(),
                                   QTableWidgetItem(str(100)))
             self.sender().blockSignals(False)
     else:
         self.sender().blockSignals(True)
         self.sender().setItem(self.sender().currentRow(),
                               self.sender().currentColumn(),
                               QTableWidgetItem(""))
         self.sender().blockSignals(False)
Пример #5
0
 def insertTasks(self, *tasks):
     for task in tasks:
         if task:
             rowCount = self.tasksTableWidget.rowCount()
             self.tasksTableWidget.setRowCount(rowCount + 1)
             self.tasksTableWidget.setItem(rowCount, 0,
                                           QTableWidgetItem(task))
             self.tasksTableWidget.resizeRowsToContents()
             self.taskTextEdit.clear()
Пример #6
0
 def add_header_row(self, _header: Header = Header()):
     self.mock_env_cors_headers.insertRow(
         self.mock_env_cors_headers.rowCount())
     row_position = self.mock_env_cors_headers.rowCount()
     self.mock_env_cors_headers.setItem(row_position - 1, 0,
                                        QTableWidgetItem(_header.key))
     self.mock_env_cors_headers.setItem(row_position - 1, 1,
                                        QTableWidgetItem(_header.value))
     _delete = QTableWidgetItem()
     _delete_icon = QIcon(full_path("assets/images/icons/close.ico"))
     _delete.setSizeHint(QSize(50, 50))
     _delete.setIcon(_delete_icon)
     self.mock_env_cors_headers.setItem(row_position - 1, 2, _delete)
Пример #7
0
    def insert_helper_item(self, bypass_save_enable=False) -> None:
        button = QPushButton("+", self)

        self.warnings_table.setRowCount(self.warnings_table.rowCount() + 1)
        self.warnings_table.setCellWidget(self.warnings_table.rowCount() - 1,
                                          0, button)

        for i in range(self.warnings_table.columnCount()):
            item = self.warnings_table.item(self.warnings_table.rowCount() - 1,
                                            i)

            if item is None:
                item = QTableWidgetItem()
                self.warnings_table.setItem(self.warnings_table.rowCount() - 1,
                                            i, item)

            item.setFlags(item.flags() ^ Qt.ItemFlag.ItemIsEnabled)

        button.setFixedSize(QSize(25, 25))
        button.clicked.connect(
            lambda: self.insert_new_item(bypass_save_enable))
Пример #8
0
 def start_errors_calculate(self):
     self.waiting_text_3.setText("Команда выполняется…")
     self.repaint()
     alpha = self.alpha_input.value()
     c = self.c_input.value()
     d = self.d_input.value()
     time = self.time_input.value()
     length = self.length_input.value()
     number = self.number_input_2.value()
     if 1 <= self.method_3 <= 2:
         hx_rate, ht_rate = 2, 4
     else:
         hx_rate, ht_rate = 2, 2
     norm_error = uniform_norm_error
     for j in range(self.tableWidget_error_rates.rowCount()):
         if not self.tableWidget_error_rates.item(
                 j, 0) or not self.tableWidget_error_rates.item(j, 1):
             QMessageBox.critical(
                 self, "Ошибка! ",
                 "Наличие пустых/полупустых строк в таблицах недопустимо!")
             break
         i = int(self.tableWidget_error_rates.item(j, 0).text())
         k = int(self.tableWidget_error_rates.item(j, 1).text())
         results = get_numerical_experiments(i, k, alpha, c, d, time,
                                             length, number, hx_rate,
                                             ht_rate,
                                             self.methods[self.method_3],
                                             norm_error)
         self.tableWidget_error_rates.setItem(
             j, 0, QTableWidgetItem(str(int(results[0]))))
         self.tableWidget_error_rates.setItem(
             j, 1, QTableWidgetItem(str(int(results[1]))))
         self.tableWidget_error_rates.setItem(
             j, 2, QTableWidgetItem(str("%.6e" % results[2])))
         self.tableWidget_error_rates.setItem(
             j, 3, QTableWidgetItem(str("%.6e" % results[3])))
         self.tableWidget_error_rates.setItem(
             j, 4, QTableWidgetItem(str("%.6f" % results[4])))
         self.repaint()
     self.waiting_text_3.setText("Нажмите «Старт» для начала работы.")
Пример #9
0
    def createTable(self):
        #
        # Define the max number of rows and the colomns. Lable the columns
        # with letters of the alphabet like spreadsheets since VisiCalc.
        #
        self.maxRows = 99
        self.headerLabels = [
            "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
            "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
        ]
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(self.maxRows)
        self.tableWidget.setColumnCount(len(self.headerLabels))
        self.tableWidget.setHorizontalHeaderLabels(self.headerLabels)

        # Pre-populate the cells in the spreadsheets with data, strings in
        # this example.
        #
        for row in range(0, self.maxRows):
            for col in range(0, len(self.headerLabels)):
                self.tableWidget.setItem(
                    row, col,
                    QTableWidgetItem("Cell {0}{1}".format(
                        self.headerLabels[col], row + 1)))
                #
                # Set every other row a light green color to help readability.
                #
                if row % 2 != 0:
                    self.tableWidget.item(row, col).setBackground(
                        QColor(220, 255, 220))

        self.tableWidget.move(0, 0)
        #
        # The next two function calls 'tighten up' the space around the text
        # items inserted into each cell.
        #
        self.tableWidget.resizeColumnsToContents()
        self.tableWidget.resizeRowsToContents()

        # Hook various events to their respective callbacks.
        #
        self.tableWidget.cellClicked.connect(self.cellClicked)
        self.tableWidget.cellChanged.connect(self.cellChanged)
        self.tableWidget.cellActivated.connect(self.cellActivated)
        self.tableWidget.cellEntered.connect(self.cellEntered)
        self.tableWidget.cellPressed.connect(self.cellPressed)
Пример #10
0
    def update_table_items(self, bypass_save_enable=False) -> None:
        self.__warnings_table.clearContents()
        self.__warnings_table.setRowCount(len(self.warnings))

        for i in range(len(self.warnings)):
            for header in self.header_list:
                if len(header) == 0:
                    button = QPushButton("-", self)
                    button.setFixedSize(QSize(25, 25))

                    self.warnings_table.setCellWidget(i, 0, button)
                    button.clicked.connect(lambda: self.remove_table_row(i))
                    continue

                item: QTableWidgetItem = QTableWidgetItem()
                item.setText(self.warnings[i][header])

                self.warnings_table.setItem(i, self.header_list.index(header),
                                            item)

        self.insert_helper_item(bypass_save_enable)
Пример #11
0
    def initUI(self):
        self.grid = QGridLayout(self)

        self.file_control_grid = QGridLayout()
        self.file_control_grid.setSpacing(3)
        self.grid.addLayout(self.file_control_grid, 0, 0)

        self.file_tree_grid = QGridLayout()
        self.file_tree_grid.setSpacing(3)
        self.grid.addLayout(self.file_tree_grid, 1, 0)

        self.group_control_grid = QGridLayout()
        self.group_control_grid.setSpacing(3)
        self.grid.addLayout(self.group_control_grid, 0, 1)

        self.attribute_grid = QGridLayout()
        self.attribute_grid.setSpacing(3)
        self.grid.addLayout(self.attribute_grid, 1, 1)

        self.roi_control_grid = QGridLayout()
        self.roi_control_grid.setSpacing(3)
        self.grid.addLayout(self.roi_control_grid, 0, 2)

        self.plot_grid = QGridLayout()
        self.plot_grid.setSpacing(3)
        self.grid.addLayout(self.plot_grid, 1, 2)

        # # # # File control browser: # # # # # # # # (0,0)
        loadButton = QPushButton("Load expt. file", self)
        loadButton.clicked.connect(self.selectDataFile)
        # Label with current expt file
        self.currentExperimentLabel = QLabel('')
        self.file_control_grid.addWidget(loadButton, 0, 0)
        self.file_control_grid.addWidget(self.currentExperimentLabel, 1, 0)

        directoryButton = QPushButton("Select data directory", self)
        directoryButton.clicked.connect(self.selectDataDirectory)
        self.file_control_grid.addWidget(directoryButton, 0, 1)
        self.data_directory_display = QLabel('')
        self.data_directory_display.setFont(QtGui.QFont('SansSerif', 8))
        self.file_control_grid.addWidget(self.data_directory_display, 1, 1)

        # Attach metadata to file
        attachDatabutton = QPushButton("Attach metadata to file", self)
        attachDatabutton.clicked.connect(self.attachData)
        self.file_control_grid.addWidget(attachDatabutton, 2, 0, 1, 2)

        # Select image data file
        selectImageDataFileButton = QPushButton("Select image data file", self)
        selectImageDataFileButton.clicked.connect(self.selectImageDataFile)
        self.file_control_grid.addWidget(selectImageDataFileButton, 3, 0, 1, 2)

        # # # # File tree: # # # # # # # #  (1,0)
        self.groupTree = QTreeWidget(self)
        self.groupTree.setHeaderHidden(True)
        self.groupTree.itemClicked.connect(self.onTreeItemClicked)
        self.file_tree_grid.addWidget(self.groupTree, 3, 0, 2, 7)

        # # # # Group control: # # # # # # # # (0, 1)
        deleteGroupButton = QPushButton("Delete selected group", self)
        deleteGroupButton.clicked.connect(self.deleteSelectedGroup)
        self.group_control_grid.addWidget(deleteGroupButton, 0, 0, 1, 2)

        # File name display
        self.currentImageFileNameLabel = QLabel('')
        self.group_control_grid.addWidget(self.currentImageFileNameLabel, 1, 0)

        # Channel drop down
        ch_label = QLabel('Channel:')
        self.ChannelComboBox = QComboBox(self)
        self.ChannelComboBox.addItem("1")
        self.ChannelComboBox.addItem("0")
        self.ChannelComboBox.activated.connect(self.selectChannel)
        self.group_control_grid.addWidget(ch_label, 2, 0)
        self.group_control_grid.addWidget(self.ChannelComboBox, 2, 1)

        # # # # Attribute table: # # # # # # # # (1, 1)
        self.tableAttributes = QTableWidget()
        self.tableAttributes.setStyleSheet("")
        self.tableAttributes.setColumnCount(2)
        self.tableAttributes.setObjectName("tableAttributes")
        self.tableAttributes.setRowCount(0)
        item = QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(10)
        item.setFont(font)
        item.setBackground(QtGui.QColor(121, 121, 121))
        brush = QtGui.QBrush(QtGui.QColor(91, 91, 91))
        brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern)
        item.setForeground(brush)
        self.tableAttributes.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        item.setBackground(QtGui.QColor(123, 123, 123))
        brush = QtGui.QBrush(QtGui.QColor(91, 91, 91))
        brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern)
        item.setForeground(brush)
        self.tableAttributes.setHorizontalHeaderItem(1, item)
        self.tableAttributes.horizontalHeader().setCascadingSectionResizes(
            True)
        self.tableAttributes.horizontalHeader().setHighlightSections(False)
        self.tableAttributes.horizontalHeader().setSortIndicatorShown(True)
        self.tableAttributes.horizontalHeader().setStretchLastSection(True)
        self.tableAttributes.verticalHeader().setVisible(False)
        self.tableAttributes.verticalHeader().setHighlightSections(False)
        item = self.tableAttributes.horizontalHeaderItem(0)
        item.setText("Attribute")
        item = self.tableAttributes.horizontalHeaderItem(1)
        item.setText("Value")

        self.tableAttributes.itemChanged.connect(self.update_attrs_to_file)
        self.attribute_grid.addWidget(self.tableAttributes, 3, 0, 1, 8)

        # # # # Roi control # # # # # # # # (0, 2)
        # ROI type drop-down
        self.RoiTypeComboBox = QComboBox(self)
        self.RoiTypeComboBox.addItem("freehand")
        radii = [1, 2, 3, 4, 6, 8]
        for radius in radii:
            self.RoiTypeComboBox.addItem("circle:" + str(radius))
        self.RoiTypeComboBox.activated.connect(self.selectRoiType)
        self.roi_control_grid.addWidget(self.RoiTypeComboBox, 0, 0)

        # Clear all ROIs button
        self.clearROIsButton = QPushButton("Clear ROIs", self)
        self.clearROIsButton.clicked.connect(self.clearRois)
        self.roi_control_grid.addWidget(self.clearROIsButton, 0, 2)

        # Response display type dropdown
        self.RoiResponseTypeComboBox = QComboBox(self)

        self.RoiResponseTypeComboBox.addItem("RawTrace")
        self.RoiResponseTypeComboBox.addItem("TrialAverage")
        self.RoiResponseTypeComboBox.addItem("TrialResponses")
        self.RoiResponseTypeComboBox.addItem("TrialAverageDFF")
        self.roi_control_grid.addWidget(self.RoiResponseTypeComboBox, 2, 2)

        # ROIset file name line edit box
        self.defaultRoiSetName = "roi_set_name"
        self.le_roiSetName = QLineEdit(self.defaultRoiSetName)
        self.roi_control_grid.addWidget(self.le_roiSetName, 1, 1)

        # Save ROIs button
        self.saveROIsButton = QPushButton("Save ROIs", self)
        self.saveROIsButton.clicked.connect(self.saveRois)
        self.roi_control_grid.addWidget(self.saveROIsButton, 1, 0)

        # Load ROI set combobox
        self.loadROIsComboBox = QComboBox(self)
        self.loadROIsComboBox.addItem("(load existing ROI set)")
        self.loadROIsComboBox.activated.connect(self.selectedExistingRoiSet)
        self.roi_control_grid.addWidget(self.loadROIsComboBox, 1, 2)
        self.updateExistingRoiSetList()

        # Delete current roi button
        self.deleteROIButton = QPushButton("Delete ROI", self)
        self.deleteROIButton.clicked.connect(self.deleteRoi)
        self.roi_control_grid.addWidget(self.deleteROIButton, 2, 0)

        # Current roi slider
        self.roiSlider = QSlider(QtCore.Qt.Orientation.Horizontal, self)
        self.roiSlider.setMinimum(0)
        self.roiSlider.setMaximum(self.max_rois)
        self.roiSlider.valueChanged.connect(self.sliderUpdated)
        self.roi_control_grid.addWidget(self.roiSlider, 2, 1, 1, 1)

        ctx = plt.rc_context({
            'xtick.major.size': 1,
            'axes.spines.top': False,
            'axes.spines.right': False,
            'xtick.labelsize': 'xx-small',
            'ytick.labelsize': 'xx-small',
            'xtick.major.size': 1.0,
            'ytick.major.size': 1.0,
            'xtick.major.pad': 1.0,
            'ytick.major.pad': 1.0
        })
        with ctx:
            self.responseFig = plt.figure(frameon=False, layout='constrained')
            self.responsePlot = self.responseFig.add_subplot(111)
            self.responseCanvas = FigureCanvas(self.responseFig)
        self.responseCanvas.draw_idle()
        self.plot_grid.addWidget(self.responseCanvas, 0, 0)

        # # # # Image canvas # # # # # # # # (1, 2)
        self.roi_fig = plt.figure()
        self.roi_ax = self.roi_fig.add_subplot(111)
        self.roi_canvas = FigureCanvas(self.roi_fig)
        self.toolbar = NavigationToolbar(self.roi_canvas, self)
        self.roi_ax.set_aspect('equal')
        self.roi_ax.set_axis_off()
        self.plot_grid.addWidget(self.toolbar, 1, 0)
        self.plot_grid.addWidget(self.roi_canvas, 2, 0)
        self.plot_grid.setRowStretch(0, 1)
        self.plot_grid.setRowStretch(1, 3)
        self.plot_grid.setRowStretch(2, 3)

        # Current z slice slider
        self.zSlider = QSlider(QtCore.Qt.Orientation.Horizontal, self)
        self.zSlider.setMinimum(0)
        self.zSlider.setMaximum(50)
        self.zSlider.setValue(0)
        self.zSlider.valueChanged.connect(self.zSliderUpdated)
        self.plot_grid.addWidget(self.zSlider, 3, 0)

        self.roi_fig.tight_layout()

        self.setWindowTitle('Visanalysis')
        self.setGeometry(200, 200, 1200, 600)
        self.show()
Пример #12
0
def makeNamelist(names):
    namesTable = QTableWidget()
    namesTable.setFixedSize(994, 450)  # 451
    namesTable.setRowCount(len(names))  # NAMES
    namesTable.setColumnCount(4)
    namesTable.setShowGrid(False)
    scroller = namesTable.verticalScrollBar()
    scroller.setStyleSheet("QScrollBar:vertical{width: 50px;}")
    # QScrollBar::left-arrow:vertical, QScrollBar::right-arrow:vertical{height:100px;}
    namesTable.verticalHeader().hide()
    ntPalette = namesTable.palette()
    if opts.timeclockOpts["darkTheme"]:
        ntPalette.setColor(QtGui.QPalette.ColorRole.Text, Qt.GlobalColor.white)
    else:
        ntPalette.setColor(QtGui.QPalette.ColorRole.Text, Qt.GlobalColor.black)
    namesTable.setPalette(ntPalette)

    def setLastRow(r, *args):
        global lastSelectedRow
        for i in range(namesTable.columnCount()):
            if lastSelectedRow != None:
                namesTable.item(lastSelectedRow, i).setSelected(False)
            namesTable.item(r, i).setSelected(True)
        lastSelectedRow = r

    namesTable.cellClicked.connect(setLastRow)

    headers = ["Name", "Graph", "Hours", "I/O"]
    for header in range(len(headers)):
        headItem = QTableWidgetItem()
        headItem.setText(headers[header])
        namesTable.setHorizontalHeaderItem(header, headItem)

    for i in range(namesTable.rowCount()):
        nameItem = makeTableItem(names[i])
        namesTable.setItem(i, 0, nameItem)
        #
        graphItem = makeTableItem("")
        graphFont = graphItem.font()
        graphFont.setStretch(25)
        graphFont.setLetterSpacing(QtGui.QFont.SpacingType.AbsoluteSpacing, 0)
        graphItem.setFont(graphFont)
        namesTable.setItem(i, 1, graphItem)
        #
        hoursItem = makeTableItem("")
        namesTable.setItem(i, 2, hoursItem)
        #
        ioItem = makeTableItem("")
        ioFont = QtGui.QFont("Courier New", 14)
        ioFont.setBold(True)
        ioItem.setFont(ioFont)
        ioItem.setTextAlignment(Qt.Alignment.AlignRight)
        namesTable.setItem(i, 3, ioItem)

    namesTable.setVisible(False)
    namesTable.horizontalHeader().setSectionResizeMode(
        0, QHeaderView.ResizeMode.Stretch)
    namesTable.setColumnWidth(1, 100)
    namesTable.resizeColumnToContents(2)
    namesTable.resizeColumnToContents(3)
    namesTable.setVisible(True)
    return namesTable