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)
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)