def read(self, index): putanja = self.dock.model.filePath(index) if os.path.isdir(putanja): return ista_putanja = False for i in range(len(self.lista_putanja)): if putanja == self.lista_putanja[i]: ista_putanja = True return if not ista_putanja: self.lista_putanja.append(putanja) if putanja.find(".sql") != -1: self.connection = mysql.connector.connect(user="******", password="******", host="127.0.0.1", database="projekat") self.csor = self.connection.cursor() putanja = "podaci\metaPodaci\projekat_meta_podaci.csv" meta_podaci = citanje_meta_podataka(putanja, True) self.imena_tabela = meta_podaci[4].split(",") self.treeView = QTreeView() self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect(self.dugme_baza) model = QStandardItemModel(parent=self.dock.tree.sub_layout) item = QStandardItem("zatvori") item.setEditable(False) model.appendRow(item) for text in self.imena_tabela: item = QStandardItem(text) item.setEditable(False) model.appendRow(item) self.treeView.setModel(model) self.treeView.clicked.connect(self.dugme_baza) self.treeView.PositionAtBottom si = self.dock.tree.sub_layout.sizeHint() si.setWidth(self.dock.width()) si.setHeight(200) self.treeView.setFixedSize(si.width(), si.height()) self.treeView.setHeaderHidden(True) self.dock.tree.sub_layout.addWidget(self.treeView) self.dock.tree.sub_layout.setAlignment(self.treeView, QtCore.Qt.AlignBottom) return tab = Tab(putanja, parent=self.central_widget) tab.pocetna_strana = self if putanja != "": tab.read() else: tab.read(putanja) tab.btn_down.clicked.connect(self.otvori_tabelu_dete) tab.btn_up.clicked.connect(self.otvori_tabelu_roditelj) tab.naziv = tab.meta_podaci[0] self.central_widget.addTab(tab, tab.naziv) self.central_widget.setCurrentIndex(self.central_widget.currentIndex()+1)
def dugme_baza(self, model_indeks): indeks = model_indeks.row() if indeks == 0: self.treeView.close() for i in range(len(self.lista_putanja)): if self.lista_putanja[i].find(".sql") != 1: self.lista_putanja.pop(i) break self.central_widget.setCurrentIndex(indeks) brojac = 0 while len(self.lista_baza) != 0: tab = self.central_widget.currentWidget() if tab.is_baza: for i in range(brojac, len(self.lista_baza)): if self.lista_baza[brojac] == tab.indeks: self.lista_baza.pop(brojac) self.central_widget.removeTab(indeks) break else: brojac += 1 else: indeks += 1 self.central_widget.setCurrentIndex(indeks) self.csor.close() self.connection.close() return else: indeks -= 1 for i in range(len(self.lista_baza)): if self.lista_baza[i] == indeks: return self.lista_baza.append(indeks) tab = Tab(parent=self.central_widget) tab.pocetna_strana = self tab.indeks = indeks tab.naziv = self.imena_tabela[indeks] nova_putanja = "podaci\\metaPodaci\\" nova_putanja += self.imena_tabela[indeks][0].lower() for s in range(1, len(self.imena_tabela[indeks])): if self.imena_tabela[indeks][s].isupper(): nova_putanja += "_" + self.imena_tabela[indeks][s].lower() else: nova_putanja += self.imena_tabela[indeks][s] nova_putanja += "_meta_podaci_sql.csv" tab.read(nova_putanja) tab.btn_down.clicked.connect(self.otvori_tabelu_dete) tab.btn_up.clicked.connect(self.otvori_tabelu_roditelj) self.central_widget.addTab(tab, tab.naziv) self.central_widget.setCurrentIndex(self.central_widget.currentIndex()+1)
def otvori_tabelu_dete(self): if self.central_widget.currentWidget() == None: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Trenutno nijedna datoteka nije otvorena!") poruka.exec_() return elif not hasattr(self.central_widget.currentWidget().table, "selected_elem"): poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Trenutno nijedan element nije selektovan!") poruka.exec_() return elif self.central_widget.currentWidget().tab_widget.currentWidget() == None: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Selektovani element nema podtabele!") poruka.exec_() return elif len(self.central_widget.currentWidget().tab_widget.currentWidget().model.lista_prikaz) == 0: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Selektovani element nema decu u selektovanoj podtabeli!") poruka.exec_() return child = self.central_widget.currentWidget().tab_widget.currentWidget() if self.central_widget.currentWidget().is_baza: tab = Tab(parent=self.central_widget) tab.pocetna_strana = self tab.naziv = child.naziv indeks = 0 for i in range(len(self.imena_tabela)): if self.imena_tabela[i] == child.naziv: indeks = i break for i in range(len(self.lista_baza)): if self.lista_baza[i] == self.central_widget.currentWidget().indeks: self.lista_baza.pop(i) break tab.indeks = indeks # self.lista_baza.append(indeks) tab.read(child.putanja) else: tab = Tab(child.putanja, self.central_widget) tab.pocetna_strana = self tab.read() tab.table.model().lista_prikaz = child.model.lista_prikaz tab.btn_down.clicked.connect(self.otvori_tabelu_dete) tab.btn_up.clicked.connect(self.otvori_tabelu_roditelj) self.central_widget.removeTab(self.central_widget.currentIndex()) self.central_widget.addTab(tab, child.meta_podaci[0]) meta = "" for s in range(len(child.meta_podaci[0])): if child.meta_podaci[0][s].isupper(): meta += "_" + child.meta_podaci[0][s].lower() else: meta += child.meta_podaci[0][s] meta = meta[1:len(meta)] meta = child.meta_podaci[2] + "\\" + meta if child.meta_podaci[1] == "serijska": meta += "_ser." elif child.meta_podaci[1] == "sekvencijalna": meta += "_sek." elif child.meta_podaci[1] == "sql": meta += "_meta_podaci_sql." meta += child.meta_podaci[3] self.lista_putanja.append(meta) self.lista_putanja.remove(self.lista_putanja[self.central_widget.currentIndex()])
def otvori_tabelu_roditelj(self): if self.central_widget.currentWidget() == None: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Trenutno nijedna datoteka nije otvorena!") poruka.exec_() return elif not hasattr(self.central_widget.currentWidget().table, "selected_elem"): poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Trenutno nijedan element nije selektovan!") poruka.exec_() return model = self.central_widget.currentWidget().table.model() element_selected = model.get_element(self.central_widget.currentWidget().table.selected_elem) veze = [] veze = self.central_widget.currentWidget().meta_podaci[9].split(",") meta_podaci = self.central_widget.currentWidget().meta_podaci lista_kljuceva = [] brojac = len(veze)-1 lista_roditelja = [] for i in range(len(veze)): if veze[brojac].find("parent_") == -1: veze.pop(brojac) brojac -= 1 else: lista_roditelja.append(veze[brojac]) brojac -= 1 index = -1 if len(lista_roditelja) == 0: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Selektovani element nema roditelja!") poruka.exec_() return elif len(lista_roditelja) > 1: list_tuple = () for i in range(len(lista_roditelja)): del1 = lista_roditelja[i].find("_")+1 del2 = lista_roditelja[i].find("(") ime = lista_roditelja[i][del1:del2] list_tuple = list_tuple + (ime,) input = QtWidgets.QInputDialog.getItem( self, "Izbor", "Trenutna tabela ima vise od 1 roditelja\nIzaberite roditelja:", list_tuple, 0, editable=False) if input[1]: for i in range(len(lista_roditelja)): if lista_roditelja[i].find(input[0]) != -1: index = i break else: return elif len(lista_roditelja) == 1: index = 0 if index == -1: return del1 = lista_roditelja[index].find("_")+1 lista_roditelja[index] = lista_roditelja[index][del1:len(lista_roditelja[index])] del1 = lista_roditelja[index].find("(") ime_roditelja = lista_roditelja[index][0:del1] nova_putanja = ime_roditelja[0].lower() for s in range(1, len(ime_roditelja)): if ime_roditelja[s].isupper(): nova_putanja += "_" + ime_roditelja[s].lower() else: nova_putanja += ime_roditelja[s] nova_putanja = meta_podaci[2] + "\\" + nova_putanja if meta_podaci[1] == "serijska": nova_putanja += "_ser." elif meta_podaci[1] == "sekvencijalna": nova_putanja += "_sek." elif meta_podaci[1] == "sql": nova_putanja += "_meta_podaci_sql." nova_putanja += meta_podaci[3] del1 = lista_roditelja[index].find("(") + 1 del2 = lista_roditelja[index].find(")") lista_kljuceva.append(lista_roditelja[index][del1:del2].split("#")) if self.central_widget.currentWidget().is_baza: tab = Tab(parent=self.central_widget) tab.pocetna_strana = self tab.naziv = ime_roditelja indeks = 0 for i in range(len(self.imena_tabela)): if self.imena_tabela[i] == ime_roditelja: indeks = i break for i in range(len(self.lista_baza)): if self.lista_baza[i] == self.central_widget.currentWidget().indeks: self.lista_baza.pop(i) break tab.indeks = indeks tab.read(nova_putanja) else: tab = Tab(nova_putanja, self.central_widget) tab.pocetna_strana = self tab.read() indeks_roditelja = -1 for j in range(len(tab.table.model().lista_prikaz)): pronadjen = True for m in range(len(lista_kljuceva[len(lista_kljuceva)-1])): kljucevi = lista_kljuceva[len(lista_kljuceva)-1][m].split("=") if len(kljucevi) == 1: if element_selected.__getattribute__(kljucevi[0]) != tab.table.model().lista_prikaz[j].__getattribute__(kljucevi[0]): pronadjen = False elif len(kljucevi) == 2: if element_selected.__getattribute__(kljucevi[0]) != tab.table.model().lista_prikaz[j].__getattribute__(kljucevi[1]): pronadjen = False else: print("pocetna_strana.py, 124 linija, eror u len(klucevi):", len(kljucevi), "// ", kljucevi) if pronadjen: indeks_roditelja = j break if indeks_roditelja == -1: poruka = QMessageBox() icon = QtGui.QIcon("src/ikonice/logo.jpg") poruka.setWindowIcon(icon) poruka.setWindowTitle("Upozorenje!") poruka.setText("Selektovani element nema roditelja sa istim kljucem kao kod selektovanog!") poruka.exec_() return tab.table.selectRow(indeks_roditelja) top = tab.table.currentIndex() tab.element_selected(top) # tab.table.setModel(tab.table.model()) tab.btn_down.clicked.connect(self.otvori_tabelu_dete) tab.btn_up.clicked.connect(self.otvori_tabelu_roditelj) # tab.btn_left.clicked.connect(self.otvori_tabelu_levi_rodjak) # tab.btn_right.clicked.connect(self.otvori_tabelu_desni_rodjak) self.central_widget.removeTab(self.central_widget.currentIndex()) self.central_widget.addTab(tab, ime_roditelja) meta = "" for s in range(len(self.central_widget.currentWidget().meta_podaci[0])): if self.central_widget.currentWidget().meta_podaci[0][s].isupper(): meta += "_" + self.central_widget.currentWidget().meta_podaci[0][s].lower() else: meta += self.central_widget.currentWidget().meta_podaci[0][s] meta = meta[1:len(meta)] meta = self.central_widget.currentWidget().meta_podaci[2] + "\\" + meta if self.central_widget.currentWidget().meta_podaci[1] == "serijska": meta += "_ser." elif self.central_widget.currentWidget().meta_podaci[1] == "sekvencijalna": meta += "_sek." elif self.central_widget.currentWidget().meta_podaci[1] == "sql": meta += "_meta_podaci_sql." meta += self.central_widget.currentWidget().meta_podaci[3] self.lista_putanja.append(meta) self.lista_putanja.remove(self.lista_putanja[self.central_widget.currentIndex()])