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