示例#1
0
 def __setFilter__(self):
     self.insertRow(0)
     for idx, header in enumerate(self.columns):
         if header in ['번호', '설정']:
             item = QTableWidgetItem('')
             item.setFlags(Qt.ItemIsEditable)
             self.setItem(0, idx, item)
         elif header == '개월수':
             items = self.dataFrame[header].drop_duplicates().tolist()
             i = 0
             p = []
             for item in items:
                 try:
                     items[i] = int(item)
                 except:
                     p.append(i)
                 i += 1
             p.reverse()
             for i in p:
                 items.pop(i)
             items.sort()
             items = ['전체'] + [str(item) for item in items]
             CbxFilterInTable(idx, items, self)
         elif header == '사업비':
             items = self.dataFrame[header].drop_duplicates().tolist()
             i = 0
             p = []
             for item in items:
                 item = item.replace(',', '')
                 try:
                     items[i] = int(item)
                 except:
                     p.append(i)
                 i += 1
             p.reverse()
             for i in p:
                 items.pop(i)
             items.sort()
             items = ['전체'] + [format(item, ',') for item in items]
             CbxFilterInTable(idx, items, self)
         else:
             items = self.dataFrame[header].drop_duplicates().tolist()
             if '' in items:
                 items.remove('')
             items.sort()
             items = ['전체'] + items
             CbxFilterInTable(idx, items, self)
示例#2
0
    def fill_table(self, ndx):
        self.table.setRowCount(0)

        if ndx < 0:
            return

        fr = self.file_selector.currentData()
        item = QTableWidgetItem()
        item.setData(Qt.DisplayRole, "name")
        val = QTableWidgetItem()
        val.setData(Qt.DisplayRole, fr.name)
        self.table.insertRow(0)
        self.table.setItem(0, 0, item)
        self.table.setItem(0, 1, val)
        for info in fr.other.keys():
            if info == "archive" and not self.settings.archive:
                continue

            if any(
                    isinstance(fr.other[info], obj)
                    for obj in [str, float, int]):
                row = self.table.rowCount()
                self.table.insertRow(row)

                item = QTableWidgetItem()
                info_name = info.replace("_", " ")
                val = fr.other[info]
                if info == "mass":
                    info_name += " (%s)" % self.settings.mass
                    if self.settings.mass == "Da":
                        val /= UNIT.AMU_TO_KG

                elif info == "temperature":
                    info_name += " (K)"

                elif (any(info == s for s in nrg_infos)
                      or info.lower().endswith("energy")
                      or info.startswith("E(")):
                    if self.settings.energy == "Hartree":
                        info_name += " (E<sub>h</sub>)"
                    else:
                        info_name += " (%s)" % self.settings.energy
                    info_name = info_name.replace("orrelation", "orr.")
                    info_name = info_name.replace("Same-spin", "SS")
                    info_name = info_name.replace("Opposite-spin", "OS")
                    if self.settings.energy == "kcal/mol":
                        val *= UNIT.HART_TO_KCAL
                    elif self.settings.energy == "kJ/mol":
                        val *= 4.184 * UNIT.HART_TO_KCAL

                    val = "%.6f" % val

                elif any(info == x for x in pg_infos):
                    info_name = info.replace("_", " ")
                    if re.search("\d", val):
                        val = re.sub(r"(\d+)", r"<sub>\1</sub>", val)
                    # gaussian uses * for infinity
                    val = val.replace("*", "<sub>∞</sub>")
                    # psi4 uses _inf_
                    val = val.replace("_inf_", "<sub>∞</sub>")
                    if any(val.endswith(char) for char in "vhdsiVHDSI"):
                        val = val[:-1] + "<sub>" + val[-1].lower() + "</sub>"

                if "<sub>" in info_name:
                    self.table.setCellWidget(row, 0, QLabel(info_name))
                else:
                    item = QTableWidgetItem()
                    item.setData(Qt.DisplayRole, info_name)
                    self.table.setItem(row, 0, item)

                value = QTableWidgetItem()
                val = str(val)
                if "<sub>" in val:
                    self.table.setCellWidget(row, 1, QLabel(val))
                else:
                    value.setData(Qt.DisplayRole, val)
                    self.table.setItem(row, 1, value)

            elif isinstance(fr.other[info], Theory):
                theory = fr.other[info]
                if theory.method is not None:
                    row = self.table.rowCount()
                    self.table.insertRow(row)

                    item = QTableWidgetItem()
                    item.setData(Qt.DisplayRole, "method")
                    self.table.setItem(row, 0, item)

                    value = QTableWidgetItem()
                    value.setData(Qt.DisplayRole, theory.method.name)
                    self.table.setItem(row, 1, value)

                if theory.basis is not None:
                    if theory.basis.basis:
                        for basis in theory.basis.basis:
                            row = self.table.rowCount()
                            self.table.insertRow(row)

                            item = QTableWidgetItem()
                            if not basis.elements:
                                item.setData(Qt.DisplayRole, "basis set")
                            else:
                                item.setData(
                                    Qt.DisplayRole,
                                    "basis for %s" % ", ".join(basis.elements))
                            self.table.setItem(row, 0, item)

                            value = QTableWidgetItem()
                            value.setData(Qt.DisplayRole, basis.name)
                            self.table.setItem(row, 1, value)

                    if theory.basis.ecp:
                        for ecp in theory.basis.ecp:
                            row = self.table.rowCount()
                            self.table.insertRow(row)

                            item = QTableWidgetItem()
                            if ecp.elements is None:
                                item.setData(Qt.DisplayRole, "ECP")
                            else:
                                item.setData(Qt.DisplayRole,
                                             "ECP %s" % " ".join(ecp.elements))
                            self.table.setItem(row, 0, item)

                            value = QTableWidgetItem()
                            value.setData(Qt.DisplayRole, ecp.name)
                            self.table.setItem(row, 1, value)

            elif hasattr(fr.other[info], "__iter__") and all(
                    isinstance(x, float) for x in fr.other[info]):
                row = self.table.rowCount()
                self.table.insertRow(row)

                item = QTableWidgetItem()
                info_name = info.replace("_", " ")
                vals = fr.other[info]
                if info == "rotational_temperature":
                    info_name = "rotational constants (%s)" % self.settings.rot_const
                    if self.settings.rot_const == "GHz":
                        vals = [
                            x * PHYSICAL.KB / (PHYSICAL.PLANCK * (10**9))
                            for x in vals
                        ]

                item.setData(Qt.DisplayRole, info_name)
                self.table.setItem(row, 0, item)

                value = QTableWidgetItem()
                value.setData(Qt.DisplayRole,
                              ", ".join(["%.4f" % x for x in vals]))
                self.table.setItem(row, 1, value)

        self.table.resizeColumnToContents(0)
        self.table.resizeColumnToContents(1)

        self.apply_filter()
 def __setFilter__(self):
     self.insertRow(0)
     for idx, header in enumerate(self.columns):
         if header in ['비밀번호', '설정']:
             item = QTableWidgetItem('')
             item.setFlags(Qt.ItemIsEditable)
             self.setItem(0, idx, item)
         elif header == '주민등록번호':
             items = self.dataFrame[header].drop_duplicates().tolist()
             i = 0
             p = []
             for item in items:
                 item = item.replace('-', '')
                 try:
                     items[i] = int(item)
                 except:
                     p.append(i)
                 i += 1
             p.reverse()
             for i in p:
                 items.pop(i)
             items.sort()
             for i, item in enumerate(items):
                 if len(str(item)) != 7:
                     items[i] = '0' * (7 - len(str(item))) + str(item)
             items = ['전체'] + [
                 f"{str(item)[:6]}-{str(item)[6]}" for item in items
             ]
             CbxFilterInTable(idx, items, self)
         elif header == '연락처':
             items = self.dataFrame[header].drop_duplicates().tolist()
             i = 0
             p = []
             for item in items:
                 item = item.replace('-', '')
                 try:
                     items[i] = int(item)
                 except:
                     p.append(i)
                 i += 1
             p.reverse()
             for i in p:
                 items.pop(i)
             items.sort()
             items = ['전체'] + [
                 f"0{str(item)[:2]}-{str(item)[2:6]}-{str(item)[6:]}"
                 for item in items
             ]
             CbxFilterInTable(idx, items, self)
         elif header == '과학기술인등록번호':
             items = self.dataFrame[header].drop_duplicates().tolist()
             i = 0
             p = []
             for item in items:
                 try:
                     items[i] = int(item)
                 except:
                     p.append(i)
                 i += 1
             p.reverse()
             for i in p:
                 items.pop(i)
             items.sort()
             items = ['전체'] + [str(item) for item in items]
             CbxFilterInTable(idx, items, self)
         else:
             items = self.dataFrame[header].drop_duplicates().tolist()
             if '' in items:
                 items.remove('')
             items.sort()
             items = ['전체'] + items
             CbxFilterInTable(idx, items, self)