Important: Please read the Qt Code of Conduct -

Variable problem in EventFilter

  • Hello

    def eventFilter(self, obj, event):
        if obj == self.ui.tableWidget_2.viewport() and event.type() == QEvent.MouseButtonPress:
            if event.button() == Qt.RightButton:
                idx = self.ui.tableWidget_2.indexAt(event.pos())
                if idx.isValid():
                    ajouterAction = QAction("Ajouter", self)
                    contextMenu = QMenu(self)
        return QMainWindow.eventFilter(self, obj, event)

    the fonction :

    def ajouter_action_triggered(self):  
        import os.path
        BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        db_path = os.path.join(BASE_DIR, "database_prix.db")
        with sqlite3.connect(db_path) as db:
            row = int(QObject.sender(self).objectName())
            id = self.ui.tableWidget_2.item(row, 0).text()
            command = ''' SELECT PU.ref_pu, PU.desig_pu, PU.unite, PU.prix FROM PU WHERE id_pu = ? '''
            result= cursor.execute(command,y)                    
            x = result.fetchone()

    To explain my problem to you, I want to add a row that belongs to one qtablewidget in another, I added the EventFilter function with event "AjouterAction" but each time I select another row in the first table they add value in the "y" variable and show me the error message:

    sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.

    the query is good, everything is good except I don't understand why it stores in the variable "y" the old value and he adds to became 3 in this time.

    If you dont understand my problem i can explain with an exemple. Thanks :)

  • Lifetime Qt Champion

    @YassineKira Why don't you use instead of sqlite3?

  • @YassineKira
    As @jsulm says, if you choose to use sqlite3 plus a load of Python code you might be better asking in forums dedicated to those.

    My Python is not perfect, but: y=(str(id)). I think there you are trying to create a list (or whatever it is called) of values here? If you only have a single value to put into that list don't you have to insert a trailing comma: y=(str(id), )?

    You are re-opening and connecting to the database on each action click. Aren't you supposed to open/connect to the database once and re-use the connection as necessary?

  • @jsulm Thanks i will try to use tour method @JonB i try this, it works Thanks a lot @JonB Now i will do what @jsulm propose i will work withe the qsql

Log in to reply