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 (<
[email protected]>) escribió:
>
>
>
> Sent with ProtonMail <https://protonmail.com> Secure Email.
>
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Friday, 29 de January de 2021 21:50, Javier Perez <
> [email protected]> 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
> [email protected]
> 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
[email protected]
https://mail.python.org/mailman/listinfo/python-es