es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Botón de edición que he seleccionado en un QTreewidgetItem en un QtreeWidget que tiene datos dinámicos.

Tengo muchos botones en QTreeWidget, ¿cómo puedo hacer referencia al botón que he cliqueado o obtener su objeto?

class MainWindow(QMainWindow, main_window_ui):
    def __init__(self, parent=None):
       super(MainWindow, self).__init__(parent)
       self.setupUi(self)
       self.treeWidget = QTreeWidget()

       self.treeWidget.setColumnCount( len(HEADERS) )
       self.treeWidget.setHeaderLabels( HEADERS )
       self.treeWidget.setHeaderHidden(True)

       for i in range(10):
           item = QTreeWidgetItem()
           self.treeWidget.addTopLevelItem(item)
           item.setText(0, str(i))
           item.setText(2, "123456789")
           item.setText(3, "Ready")
           item.setText(4, "2021-04-12")

           checkbox = QCheckBox()
           checkbox.setStyleSheet(checkboxst)
           self.treeWidget.setItemWidget(item, 1, checkbox)

           button = QPushButton()
           button.setText("Start")
           button.setStyleSheet(buttonst)
           self.treeWidget.setItemWidget(item, 5, button)
           # button.clicked.connect(self.getValue)

           it = QTreeWidgetItem()
           it.setText(0, "Edited")
           item.addChild(it)

       self.treeWidget.itemClicked.connect(self.getValue)

       #snip...


   def getValue(self):
       index = self.treeWidget.currentItem()

Necesito cambiar el texto solo en el botón que he cliqueado, ¿cómo puedo referirme solo al botón que he cliqueado?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer referencia únicamente al botón que se ha pulsado, puede recuperar el widget del elemento pulsado utilizando el método itemWidget() del QTreeWidget. Luego puede comprobar si el widget pulsado es un QPushButton y modificar su texto en consecuencia.

    Aquí tienes una versión actualizada del método getValue():

    def getValue(self):
        item = self.treeWidget.currentItem()
        button = self.treeWidget.itemWidget(item, 5)
        if isinstance(button, QPushButton):
            button.setText("Pulsado")
    

Comments are closed.