Hola,

yo tiraba de un itemDelegate para editar cuallquiera de los datos de esa
columna, y de hecho siendo datos de una base de datos lo apropiado es
aplicar un modelo/vista para dejar que qt se ocupe de mostrar los datos,
https://doc.qt.io/qtforpython/overviews/model-view-programming.html


El lun, 1 feb 2021 a las 12:26, kikocorreoso vía Python-es (<
python-es@python.org>) escribió:

>
>
>
> Sent with ProtonMail <https://protonmail.com> Secure Email.
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Friday, 29 de January de 2021 21:50, Javier Perez <
> javierpe...@perasalvino.es> wrote:
>
> Hola a todos,
>
>
> Llevo ya muchas horas con esto y no lo consigo. Os pregunto a vosotros:
>
> Estoy haciendo para el proyecto de DAM que, por fin termino, un gestor de
> hábitos. Os paso una captura.
>
>
> Necesito poner donde estan los 0 un QCheckBox para poder marcar el hábito
> como realizado o no.
>
> Pues no soy capaz, la verdad. ¿Cómo lo tengo que hacer?
>
>
> Los datos estan volcados de una bbdd en SQLITE que integra el PyQt5
>
>
> Este es el código que general la tabla.
>
>         while query.next():
>             estado_diario = query.value(2) # en número indica la posición
> del campo en la tabla
>             tipo = query.value(5)
>             importancia = query.value(4)
>             nombre = query.value(3)
>             # Ahora organizamos los datos en la tabla creada anteriormente
>             self.tabla.setRowCount(index + 1)
>
>   self.tabla.setItem(index, 0, QTableWidgetItem(str(estado_diario)))
>             self.tabla.setItem(index, 1, QTableWidgetItem(importancia))
>             self.tabla.setItem(index, 2, QTableWidgetItem(tipo))
>             self.tabla.setItem(index, 3, QTableWidgetItem(nombre))
>
>
>
>
>
> He cogido el ejemplo de aquí: https://pythonspot.com/pyqt5-table/
> Y lo he modificado un poco para meter un QCheckBox (mira la línea entre
> almohadillas).
> No me queda claro si es eso lo que necesitas.
>
> import sys
> from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction,
> QTableWidget,QTableWidgetItem,QVBoxLayout, QCheckBox
> from PyQt5.QtGui import QIcon
> from PyQt5.QtCore import pyqtSlot
>
> class App(QWidget):
>
>     def __init__(self):
>         super().__init__()
>         self.title = 'PyQt5 table - pythonspot.com'
>         self.left = 0
>         self.top = 0
>         self.width = 300
>         self.height = 200
>         self.initUI()
>
>     def initUI(self):
>         self.setWindowTitle(self.title)
>         self.setGeometry(self.left, self.top, self.width, self.height)
>
>         self.createTable()
>
>         # Add box layout, add table to box layout and add box layout to
> widget
>         self.layout = QVBoxLayout()
>         self.layout.addWidget(self.tableWidget)
>         self.setLayout(self.layout)
>
>         # Show widget
>         self.show()
>
>     def createTable(self):
>        # Create table
>         self.tableWidget = QTableWidget()
>         self.tableWidget.setRowCount(4)
>         self.tableWidget.setColumnCount(2)
>
> ###############################################################################################
>         self.tableWidget.setCellWidget(0,0, QCheckBox())
>
> ###############################################################################################
>         self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
>         self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
>         self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
>         self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
>         self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
>         self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
>         self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)"))
>         self.tableWidget.move(0,0)
>
>         # table selection change
>         self.tableWidget.doubleClicked.connect(self.on_click)
>
>     @pyqtSlot()
>     def on_click(self):
>         print("\n")
>         for currentQTableWidgetItem in self.tableWidget.selectedItems():
>             print(currentQTableWidgetItem.row(),
> currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
>
> if __name__ == '__main__':
>     app = QApplication(sys.argv)
>     ex = App()
>     sys.exit(app.exec_())
>
>
> Saludos,
>
> --
> Javier Pérez
> http://es.linkedin.com/in/javierperez1
> http://www.perasalvino.es/
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout, QCheckBox, QItemDelegate
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot, Qt, QVariant

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 table - pythonspot.com'
        self.left = 0
        self.top = 0
        self.width = 300
        self.height = 200
        self.initUI()
       
    def initUI(self):
        self.setWindowTitle(self.title)
        # self.setGeometry(self.left, self.top, self.width, self.height)
       
        self.createTable()

        # Add box layout, add table to box layout and add box layout to widget
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

        # Show widget
        self.show()

    def createTable(self):
       # Create table
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1,0, QTableWidgetItem(""))
        self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
        self.tableWidget.setItem(2,0, QTableWidgetItem(""))
        self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
        self.tableWidget.setItem(3,0, QTableWidgetItem(""))
        self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)"))
        self.tableWidget.move(0,0)
        self.tableWidget.setItemDelegateForColumn(0, CheckEditor(self))

        # table selection change
        self.tableWidget.doubleClicked.connect(self.on_click)

    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

class CheckEditor(QItemDelegate):
    """Checkbox editor for tableitem"""
    def __init__(self, parent=None):
        super(CheckEditor, self).__init__(parent)

    def createEditor(self, parent, option, index):
        widget = QCheckBox(parent)
        return widget

    def setEditorData(self, editor, index):
        value = bool(index.data(Qt.DisplayRole))
        editor.setChecked(value)

    def setModelData(self, editor, model, index):
        value = editor.isChecked()
        model.setData(index, QVariant(value), Qt.DisplayRole)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(app.exec_()) 
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a