Example #1
0
    def carregarTable(self):
        db = QSqlDatabase().addDatabase('QSQLITE')
        db.setDatabaseName('Litterarius.db')
        conexao = db.connectionName()
        if db.open():
            query = QSqlQueryModel(self)
            query.setQuery(
                "SELECT"
                " livros_id, titulo, editoras.editora,"
                " isbn, qtde_estoque, vl_unitario, consignado"
                " FROM livros"
                " INNER JOIN editoras ON livros.editoras_fk = editoras.editoras_id"
            )
            model = QSqlTableModel(self, db)
            model.setQuery(query.query())
            model.select()
            self.ui.tableView.setModel(model)
            self.ui.tableView.show()

            # carregar combobox de editoras
            query2 = QSqlQueryModel(self)
            query2.setQuery("select(editora) from editoras")
            model2 = QSqlTableModel(self, db)
            model2.setQuery(query2.query())
            model2.select()
            self.ui.cbEditora.setModel(model2)
        db.close()
Example #2
0
 def carregarTable(self):
     db = QSqlDatabase().addDatabase('QSQLITE')
     db.setDatabaseName('Litterarius.db')
     if db.open():
         model = QSqlTableModel(self, db)
         model.setTable("autores")
         model.select()
         self.ui.tableView.setModel(model)
         self.ui.tableView.show()
     db.close()
     QSqlDatabase().removeDatabase('Litterarius.db')
Example #3
0
    def carregarTable(self):
        db = QSqlDatabase().addDatabase('QSQLITE')
        db.setDatabaseName('Litterarius.db')
        conexao = db.connectionName()
        if db.open():
            model = QSqlTableModel(self, db)
            model.setTable("generos")
            model.select()
            self.ui.tableView.setModel(model)
            self.ui.tableView.show()

        db.close()
Example #4
0
 def carregarComboBox(self):
     db = QSqlDatabase().addDatabase('QSQLITE')
     db.setDatabaseName('Litterarius.db')
     conexao = db.connectionName()
     if db.open():
         query = QSqlQueryModel(self)
         query.setQuery("SELECT" " fornecedor" " FROM fornecedores")
         model = QSqlTableModel(self, db)
         model.setQuery(query.query())
         model.select()
         self.ui.cbxFornecedores.setModel(model)
         self.ui.cbxFornecedores.show()
     db.close()
Example #5
0
 def carregarComboBox(self):
     db = QSqlDatabase ().addDatabase ('QSQLITE')
     db.setDatabaseName ('Litterarius.db')
     if db.open ():
         query = QSqlQueryModel (self)
         query.setQuery ("SELECT parcelas_id FROM recebimentos WHERE vendas_id = %s"
                         % (self.ui.txtVendaId.text()))
         model = QSqlTableModel (self, db)
         model.setQuery (query.query ())
         model.select ()
         self.ui.cbParcela.setModel (model)
         self.ui.cbParcela.show ()
     db.close ()
     QSqlDatabase ().removeDatabase ('Litterarius.db')
    def carregarListView(self):
        db = QSqlDatabase().addDatabase('QSQLITE')
        db.setDatabaseName('Litterarius.db')
        if db.open():
            self.model = QSqlTableModel(self, db)
            # self.model.setTable ("autores")
            # self.model.select ()
            query = QSqlQueryModel(self)
            query.setQuery("select(autor) from autores")
            self.model.setQuery(query.query())
            self.ui.lvAutor.setModel(self.model)
            self.ui.lvAutor.show()

        db.close()
Example #7
0
 def carregarTable(self):
     db = QSqlDatabase ().addDatabase ('QSQLITE')
     db.setDatabaseName ('Litterarius.db')
     if db.open ():
         query = QSqlQueryModel (self)
         query.setQuery ("SELECT vendas_id as venda, dataVenda as data,"
                         " precoVenda as preco"
                         " FROM vendas")
         model = QSqlTableModel (self, db)
         model.setQuery (query.query ())
         model.select ()
         self.ui.tableView.setModel (model)
         self.ui.tableView.show ()
     db.close ()
     QSqlDatabase ().removeDatabase ('Litterarius.db')
Example #8
0
 def carregarTable(self):
     db = QSqlDatabase().addDatabase('QSQLITE')
     db.setDatabaseName('Litterarius.db')
     conexao = db.connectionName()
     if db.open():
         model = QSqlTableModel(self, db)
         model2 = QSqlTableModel(self, db)
         model.setTable("fornecedores")
         model.select()
         self.ui.tableView.setModel(model)
         self.ui.tableView.show()
         model2.setTable("transportadoras")
         model2.select()
     db.close()
     QSqlDatabase().removeDatabase('Litterarius.db')
    def carregarListView(self):
        db = QSqlDatabase().addDatabase('QSQLITE')
        db.setDatabaseName('Litterarius.db')
        if db.open():
            self.model = QSqlTableModel(self, db)
            # self.model.setTable ("autores")
            # self.model.select ()
            query = QSqlQueryModel(self)
            query.setQuery("select(genero) from generos")
            self.model.setQuery(query.query())
            self.ui.lvGenero.setModel(self.model)
            self.ui.lvGenero.show()

            self.ui.btnIncluir.clicked.connect(self.clickedIncluir)

        db.close()
Example #10
0
 def carregarValorParcela(self):
     db = QSqlDatabase ().addDatabase ('QSQLITE')
     db.setDatabaseName ('Litterarius.db')
     if db.open ():
         query = QSqlQuery ()
         valores = query.exec ("SELECT vl_parcela, pago FROM recebimentos"
                         " WHERE parcelas_id = %s" % (self.ui.cbParcela.currentText()))
         while query.next():
             print(query.value('vl_parcela'))
         query.first()
         self.ui.txtVlrParcela.setText (str (query.value('vl_parcela')))
         # self.ui.txtVlrParcela.setText (model.data[0])
         # if model.data[1] == 1:
         #     self.ui.cbxPago.setEnabled(True)
         # else:
         #     self.ui.cbxPago.setEnabled(False)
     db.close ()
     QSqlDatabase ().removeDatabase ('Litterarius.db')
Example #11
0
 def carregarTable(self):
     db = QSqlDatabase().addDatabase('QSQLITE')
     db.setDatabaseName('Litterarius.db')
     conexao = db.connectionName()
     if db.open():
         query = QSqlQueryModel(self)
         query.setQuery(
             "SELECT"
             " titulo, editoras.editora,"
             " qtde_estoque, vl_unitario, consignado"
             " FROM livros"
             " INNER JOIN editoras ON livros.editoras_fk = editoras.editoras_id"
         )
         model = QSqlTableModel(self, db)
         model.setQuery(query.query())
         model.select()
         self.ui.tvLivros.setModel(model)
         self.ui.tvLivros.show()
     db.close()
Example #12
0
class DBConnection:
    """Utility class.
       Provides functionality for opening and closing
       db connections for clean resource management."""
    def __init__(self):
        self._db = QSqlDatabase().addDatabase("QSQLITE")
        self._db.setDatabaseName("records.db")

    def open_db(self):
        if not self._db.isOpen():
            self._db.open()
        else:
            print("Feck off, the db is already open")

    def close_db(self):
        if self._db.isOpen():
            self._db.close()
        else:
            print("Feck off, the db is already closed")

    def db(self):
        return self._db
Example #13
0
    def carregarTableByGenero(self):
        db = QSqlDatabase().addDatabase('QSQLITE')
        db.setDatabaseName('Litterarius.db')
        conexao = db.connectionName()
        if db.open():
            query = QSqlQueryModel(self)
            query.setQuery(
                "SELECT"
                " titulo, editoras.editora,"
                " qtde_estoque, vl_unitario, consignado"
                " FROM livros"
                " INNER JOIN editoras ON livros.editoras_fk = editoras.editoras_id"
                " WHERE livros_id =("
                " SELECT livros_id FROM livros_generos WHERE generos_id=("
                "       SELECT generos_id FROM generos WHERE genero LIKE '%s'))"
                % (self.ui.txtPesquisar.text() + "%"))
            model = QSqlTableModel(self, db)
            model.setQuery(query.query())
            model.select()
            self.ui.tvLivros.setModel(model)
            self.ui.tvLivros.show()

        db.close()
Example #14
0
class BeerTable(QTableView):
    def __init__(self, model, database, parent=None):
        super().__init__(parent)
        self._parent = parent or self
        self._model = model
        self.setModel(self._model)
        self.setAlternatingRowColors(True)
        self.setSortingEnabled(True)
        self.setMouseTracking(True)
        self.viewport().setAttribute(Qt.WA_Hover, True)
        
        self.horizontalHeader().setContextMenuPolicy(Qt.CustomContextMenu)
        self.horizontalHeader().customContextMenuRequested.connect(self.headerMenu)
        
        self._index = None
        self._pos = self.cursor().pos()
        self._timer = QTimer(self)
        self._timer.timeout.connect(self.updateTimer)
        self._timer.start(1000)
        
        self._label = PopupLable(self)
        
        self._database = database
        self._db = QSqlDatabase('QSQLITE')
        self._db.setDatabaseName(self._database)
        self._q = None
        self.lastError = None
        self.beers = OrderedDict()
        self.beerImages = OrderedDict()
        self.tableFields = ['Image', 'name', 'alcohol', 'quantity', 
            'producer', 'country', 'overview']
        self.loadBeers()
    
    def keyPressEvent(self, event):
        if event.key() == Qt.Key_F5:
            self.resizeRowsToContents()
            self._top_rowid = self.indexAt(self.rect().topLeft()).row()
            self._bottom_rowid = self.indexAt(self.rect().bottomRight()).row()
        elif event.key() == Qt.Key_D and event.modifiers() & Qt.ControlModifier and self.currentIndex():
            rowId = self.currentIndex().row()
            r = [self.model().item(rowId, colId).text() for colId in [1,2,4,5,6,8,13,14]]
            cb = QApplication.clipboard()
            cb.clear(mode=cb.Clipboard )
            cb.setText(chr(9).join(r), mode=cb.Clipboard)
        elif (event.key() == Qt.Key_C or event.key() == Qt.Key_S) and event.modifiers() & Qt.ControlModifier and self.currentIndex():
            try:
                rowId = self.currentIndex().row()
                beerId = int(self.model().item(rowId, 0).text())
                if beerId in self.beerImages:
                    status = []
                    if self.model().item(rowId, 6).text() != bytes([110, 111, 32, 115, 99, 111, 114, 101]).decode():
                        status.append(self.model().item(rowId, 6).text())
                    if self.model().item(rowId, 8).text() != bytes([110, 111, 32, 115, 99, 111, 114, 101]).decode():
                        status.append(self.model().item(rowId, 8).text())
                    if self.model().item(rowId, 8).text() == self.model().item(rowId, 6).text():
                        if self.model().item(rowId, 6).text() != bytes([110, 111, 32, 115, 99, 111, 114, 101]).decode():
                            status = [self.model().item(rowId, 8).text()]
                    r = [self.model().item(rowId, 1).text(),
                         self.model().item(rowId, 2).text(),
                        chr(32).join([
                            bytes([65, 66, 86, 32, 123, 125, 32, 37]).decode().format(
                                self.model().item(rowId, 4).text()),
                        ]+status),
                        chr(32).join([
                            self.model().item(rowId, 13).text(), chr(40),
                            self.model().item(rowId, 5).text(), chr(41)]),
                    ]
                    pixmap = self._pixmap(open(self.beerImages[beerId][0], 
                        ReadWriteFile.READ_BINARY).read(), None)
                    height = pixmap.size().height()
                    width = pixmap.size().width()
                    p = QPixmap(width, height + 12*len(r))
                    height = p.size().height()
                    width = p.size().width()
                    with QPainter(p) as painter:
                        painter.drawPixmap(0, 12*len(r), pixmap)
                        brush = QBrush(QColor(0, 0, 0, 255))
                        painter.fillRect(0, 0, p.size().width()-2, 12*len(r), brush)
                        font = QFont()
                        font.setFamily(bytes([65, 114, 105, 97, 108]).decode())
                        font.setBold(True)
                        font.setPixelSize(10)
                        painter.setFont( font )
                        pen = QPen()
                        pen.setColor(QColor(255, 255, 0, 255))
                        painter.setPen(pen)
                        for i, info in enumerate(r, 1):
                            painter.drawText( QPoint(2, i*10), info )
                    if event.key() == Qt.Key_C:
                        QApplication.clipboard().clear()
                        QApplication.clipboard().setPixmap(p)
                    else:
                        fileName, _ = QFileDialog.getSaveFileName(self, 
                            bytes([83, 97, 118, 101, 32, 73, 109, 97, 103, 101]).decode(),
                            str(beerId), 
                            bytes([73, 109, 97, 103, 101, 32, 40, 42, 46, 106, 112, 103, 41]).decode())
                        print(fileName)
                        p.save(fileName, bytes([74, 80, 71]).decode())
            except Exception as err:
                print(err)
        return QTableView.keyPressEvent(self, event)
    
    def updateTimer(self):
        if (self.isActiveWindow() and
            self._pos == self.cursor().pos() and 
            (not self._label.isVisible())):
            index = self.indexAt(self._pos)
            if index.column() == 0:
                i = int(self.model().data(index, Qt.DisplayRole))
                for pos in self.beerImages[i]:
                    if pos == 1:
                        pixmap = QPixmap()
                        pixmap.loadFromData(self.beerImages[i][pos])
                        self._label.setPixmap(pixmap)
                        self._label.move(self._pos)
                        self._label.setVisible(True)
                        break
        self._pos = self.cursor().pos()
        
    def Clear(self):
        self.model().clear()
        self.model().setColumnCount(len(self.tableFields))
        self.model().setHorizontalHeaderLabels(self.tableFields)
        
    def dbIter(self, sql):
        if self._q is not None:
            if self._q.exec(sql):
                has_next = self._q.next
                get_record = self._q.record
                qrange = range(0)
                if has_next():
                    record = get_record()
                    record_name = record.fieldName
                    record_value = record.value
                    qrange = range(record.count())
                    yield [record_name(i) for i in qrange]
                    yield [record_value(i) for i in qrange]
                    while has_next():
                        record = get_record()
                        record_value = record.value
                        yield [record_value(i) for i in qrange]
            else:
                self.lastError = self.__query.lastError().text()
    
    def normText(self, value):
        text = ''
        i = 0
        for c in value:
            i += 1
            if i > 90 and c == ' ':
                text += c + '\n'
                i = 0
            else:
                text += c
        return text
    
    def _pixmap(self, dataBytes, h=200, w=150):
        pixmap = QPixmap()
        pixmap.loadFromData(dataBytes)
        if h is None or w is None:
            return pixmap
        height = pixmap.size().height()
        width = pixmap.size().width()
        if width == 0 or height == 0:
            return pixmap
        return pixmap.scaled(w, h,
            Qt.IgnoreAspectRatio,
            Qt.SmoothTransformation)
    
    def loadBeers(self):
        self.beers.clear()
        self.Clear()
        if self._db.open():
            self._q = QSqlQuery(self._db)
            sqliter = self.dbIter('SELECT [id], [name], [source_page] FROM beers')
            _ = sqliter.__next__()
            for id_, name, page in sqliter:
                self.beers[id_] = [page, name]
                self.beerImages[id_] = OrderedDict()
            sqliter = self.dbIter('SELECT [id], [name], [alcohol], [quantity], [producer], [country], [overview] FROM beer_info')
            _ = sqliter.__next__()
            for id_, name, alcohol, quantity, producer, country, overview in sqliter:
                overview = self.normText(overview)
                self.beers[id_].extend([alcohol, quantity, producer, country, overview]) 
            sqliter = self.dbIter('SELECT [id], [name], [index], [image] FROM beer_images')
            _ = sqliter.__next__()
            for id_, _, index, image in sqliter:
                b = base64.b64decode(image.encode())
                self.beerImages[id_][index] = b
            for rowId, id_ in enumerate(self.beers):
                r = [id_] + self.beers[id_][1:]
                self.model().appendRow(list(map(BeerItem, r)))
                widget = QTextEdit()
                widget.setText(r[-1])
                index = self.model().index(rowId, 6)
                self.setIndexWidget(index, widget)
                if self.beerImages[id_]:
                    indexs = list(self.beerImages[id_])
                    b = self.beerImages[id_][indexs[0]]
                    pixmap = self._pixmap(b)
                    label = ImageLabel()
                    label.setPixmap(pixmap)
                    index = self.model().index(rowId, 0)
                    self.setIndexWidget(index, label)
            self._db.close()
            self.resizeColumnsToContents()
            self.resizeRowsToContents()
        self._q = None
    
    def closeEvent(self, event):
        self.Clear()
    
    def mousePressEvent(self, event):
        self._pos = event.pos()
        if event.button() == Qt.RightButton:
            index = self.indexAt(self._pos)
            if index.column() == 0:
                i = int(self.model().data(index, Qt.DisplayRole))
                for pos in self.beerImages[i]:
                    if pos == 1:
                        pixmap = QPixmap()
                        pixmap.loadFromData(self.beerImages[i][pos])
                        self._label.setPixmap(pixmap)
                        self._label.move(self._pos)
                        self._label.setVisible(True)
                        break
        return QTableView.mousePressEvent(self, event)
    
    def mouseMoveEvent(self, event):
        pos = event.pos()
        index = self.indexAt(pos)
        if self._index is None:
            self.enterIndex(index)
        elif self._index != index:
            self.leaveIndex(self._index)
            self.enterIndex(index)
        else:
            self.moveIndex(index)
        self._index = index
        self._pos = pos
        return QTableView.mouseMoveEvent(self, event)
    
    def image_mouseMoveEvent(self, event):
        pass
    
    def event(self, event):
        return QTableView.event(self, event)
    
    def enterIndex(self, index):
        self._label.setVisible(False)
    
    def leaveIndex(self, index):
        self._label.setVisible(False)
    
    def moveIndex(self, index):
        self._label.setVisible(False)
    
    def headerMenu(self, point):
        globalPos = self.mapToGlobal(point)
        column = self.horizontalHeader().visualIndexAt(point.x())
        
        names = ["Contains",
        "Starts With",
        "Equals...", 
        "Does not Equal...",
        "Greater Than",
        "Less Than",
        "Between",
        "Clear filter"]
        menu = QMenu()
        for name in names:
            menu.addAction(name)
        selectedItem = menu.exec_(globalPos)
        
        if not selectedItem:
            return
        
        if selectedItem.text() == names[7]:
            self.filterClear()
        else:
            value, status = QInputDialog.getText(self, "Custom filter", "Value:")
            if status: 
                if selectedItem.text() == names[0]:
                    self.filterColumnValueContains(column, value)
                elif selectedItem.text() == names[1]:
                    self.filterColumnValueStartsWith(column, value)
                elif selectedItem.text() == names[2]:
                    self.filterColumnValueEqual(column, value)
                elif selectedItem.text() == names[3]:
                    self.filterColumnValueEqualNo(column, value)
                elif selectedItem.text() == names[4]:
                    self.filterColumnValueGreaterThan(column, value)
                elif selectedItem.text() == names[5]:
                    self.filterColumnValueLessThan(column, value)
                elif selectedItem.text() == names[6]:
                    pass
                
        
    def isDigital(self, v):
        return v.isdigit() or ('.' in v and v.count('.') == 1)
    
    def toDigital(self, v):
        if v.isdigit():
            return int(v)
        elif '.' in v and v.count('.') == 1:
            return round(float(v), 6)
        return v
    
    def filterClear(self):
        for i in range(self.model().rowCount()):
            if self.isRowHidden(i):
                self.setRowHidden(i, False)
    
    def filterColumnValueContains(self, column, value):
        if value == str():
            self.filterClear()
        else:
            value = value.lower()
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole).lower()
                if v is None:
                    self.setRowHidden(rowId, True)
                elif v.__contains__(value):
                    self.setRowHidden(rowId, False)
                else:
                    self.setRowHidden(rowId, True)
    
    def filterColumnValueStartsWith(self, column, value):
        if value == str():
            self.filterClear()
        else:
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif v.startswith(value):
                    self.setRowHidden(rowId, False)
                else:
                    self.setRowHidden(rowId, True)
    
    def filterColumnValueEqual(self, column, value):
        if value == str():
            self.filterClear()
        elif self.isDigital(value):
            ivalue = self.toDigital(value)
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif isinstance(v, int):
                    if v == ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                elif isinstance(v, float):
                    if round(v, 6) == ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                else:
                    if v == value:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
        else:
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                    self.__frozenTableView.setRowHidden(rowId, True)
                elif v == value:
                    self.setRowHidden(rowId, False)
                    self.__frozenTableView.setRowHidden(rowId, False)
                else:
                    self.setRowHidden(rowId, True)
                    self.__frozenTableView.setRowHidden(rowId, True)
    
    def filterColumnValueEqualNo(self, column, value):
        if value == str():
            self.filterClear()
        elif self.isDigital(value):
            ivalue = self.toDigital(value)
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif isinstance(v, int):
                    if v != ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                elif isinstance(v, float):
                    if round(v, 6) != ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                else:
                    if v != value:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
        else:
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif v == value:
                    self.setRowHidden(rowId, True)
                else:
                    self.setRowHidden(rowId, False)
                    
    def filterColumnValueGreaterThan(self, column, value):
        if value == str():
            self.filterClear()
        elif self.isDigital(value):
            ivalue = self.toDigital(value)
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif (isinstance(v, int) or isinstance(v, float)):
                    if v > ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                else:
                    if v > value:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
        else:
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif v > value:
                    self.setRowHidden(rowId, False)
                else:
                    self.setRowHidden(rowId, True)
    
    def filterColumnValueLessThan(self, column, value):
        if value == str():
            self.filterClear()
        elif self.isDigital(value):
            ivalue = self.toDigital(value)
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                    self.__frozenTableView.setRowHidden(rowId, True)
                elif (isinstance(v, int) or isinstance(v, float)):
                    if v < ivalue:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
                else:
                    if v < value:
                        self.setRowHidden(rowId, False)
                    else:
                        self.setRowHidden(rowId, True)
        else:
            for rowId in range(self.model().rowCount()):
                if self.isRowHidden(rowId):
                    continue
                v = self.model().item(rowId, column).data(Qt.DisplayRole)
                if v is None:
                    self.setRowHidden(rowId, True)
                elif v < value:
                    self.setRowHidden(rowId, False)
                else:
                    self.setRowHidden(rowId, True)
Example #15
0
 def closeConnection(self, db: QSqlDatabase):
     print("%s: closeConnection" % os.path.basename(__file__))
     if db:
         if db.isOpen():
             db.close()
Example #16
0
class ApiDatabaseDialog(QDialog):
    def __init__(self):
        super().__init__()

        self.setMinimumSize(QSize(800, 400))

        config_folder = os.path.join(os.path.expanduser("~"), '.config',
                                     'CSV_Viewer')
        os.makedirs(config_folder, exist_ok=True)
        db_file = "apilinks.sqlite"
        db_path = os.path.join(config_folder, db_file)

        self.db = QSqlDatabase("QSQLITE")
        self.db.setDatabaseName(db_path)
        if self.db.open():
            if os.path.getsize(db_path) == 0:
                query = QSqlQuery(db=self.db)
                query.exec_("CREATE TABLE links(address TEXT)")
                demo = "http://climatedataapi.worldbank.org/climateweb/rest/v1/country/cru/tas/year/POL.csv"
                query.exec_(f"INSERT INTO links VALUES ('{demo}')")
                self.db.commit()
        else:
            QMessageBox.warning(self, "Error", "API links database not open.")

        self.table = QTableView()
        self.model = QSqlTableModel(db=self.db)
        self.model.setTable('links')
        self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
        self.model.select()

        # set headers
        column_titles = {"address": "API Address"}
        for n, t in column_titles.items():
            idx = self.model.fieldIndex(n)
            self.model.setHeaderData(idx, Qt.Horizontal, t)

        self.table.setModel(self.model)
        self.table.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
        self.table.setSelectionMode(QtWidgets.QTableView.SingleSelection)
        self.table.setColumnWidth(0, 750)
        self.table.selectRow(0)
        self.table.setFocus()

        self.layout = QVBoxLayout()
        QBtn = QDialogButtonBox.Ok
        self.buttonBox = QDialogButtonBox(QBtn)

        style_add = self.buttonBox.style()
        icon = style_add.standardIcon(QStyle.SP_DialogYesButton)
        self.button_add = QPushButton(icon, "&Add")
        self.button_add.setStatusTip("Add new api link")
        self.button_add.clicked.connect(self.add_link)

        style_del = self.buttonBox.style()
        icon = style_del.standardIcon(QStyle.SP_DialogCloseButton)
        self.button_del = QPushButton(icon, "&Delete")
        self.button_del.setStatusTip("Delete api link")
        self.button_del.clicked.connect(self.del_link)

        self.buttonBox.accepted.connect(self.accept)

        self.layout.addWidget(self.table)
        layout_btn = QHBoxLayout()
        layout_btn.addWidget(self.button_add)
        layout_btn.addWidget(self.button_del)
        layout_btn.addSpacerItem(QSpacerItem(150, 10, QSizePolicy.Expanding))
        layout_btn.addWidget(self.buttonBox)

        self.layout.addLayout(layout_btn)
        self.setLayout(self.layout)

    def closeEvent(self, event) -> None:
        """ Quit dialog """
        self.db.close()

    def add_link(self):
        self.model.insertRows(self.model.rowCount(), 1)
        self.table.setFocus()
        self.table.selectRow(self.model.rowCount() - 1)
        index = self.table.currentIndex()
        self.table.edit(index)

    def del_link(self):
        if self.model.rowCount() > 0:
            index = self.table.currentIndex()
            self.model.removeRow(index.row())
            self.model.submitAll()
            self.table.setRowHidden(index.row(), True)
            if index.row() == 0:
                current = 0
            else:
                current = index.row() - 1
            self.table.selectRow(current)