Search code examples
pythonpyqt5qtreewidget

Get ItemWidget from QTreeWidget on DoubleClick event


I created a QTreeWidget now when i click on an item, i want to get the widget data. I fill my QTreeWidget that way :

    def addNodeToTreeview(self, data):
    self.panelInfoPatientUi.treeWidgetDevices.clear()
    for item in data: 
        mainWidgetItem = QtGui.QTreeWidgetItem(self.panelInfoPatientUi.treeWidgetDevices)
        widgetContainer = QtWidgets.QWidget()
        widgetContainer.setObjectName("widgetContainer") 
        deviceWidget = Ui_DeviceListviewWidget()
        deviceWidget.setupUi(widgetContainer)

        deviceWidget.labelSerialNumber.setText(item.serialNumber)
        deviceWidget.labelModel.setText(item.model)
        deviceWidget.labelInstallationDate.setText(item.installDate)

        mainWidgetItem.setSizeHint(0, widgetContainer.sizeHint())   

        self.panelInfoPatientUi.treeWidgetDevices.addTopLevelItem(mainWidgetItem)
        self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(mainWidgetItem, 0, widgetContainer)

        for files in item.listFile:
            #Files
            fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
            widgetContainerFiles = QtWidgets.QWidget()
            widgetContainerFiles.setObjectName("widgetContainerFiles")
            fileWidget = Ui_FileListWidgetItem()    
            fileWidget.setupUi(widgetContainerFiles)

            fileWidgetItem.setText(0, "BLABLBALA")

            fileWidget.labelFileName.setText(files.fileName)
            fileWidget.labelDateFile.setText(files.dateFile)

            fileWidgetItem.setSizeHint(0, widgetContainerFiles.sizeHint())
            mainWidgetItem.addChild(fileWidgetItem)
            self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)

i connect the widget that way :

    def connectSignalTreeWidget(self):
        self.view.panelInfoPatientUi.treeWidgetDevices.itemDoubleClicked.connect(self.testest)

and when i receive the Click event i can't access to my widget i tried several way :

    def testest(self, item, col):

    print(self.view.panelInfoPatientUi.treeWidgetDevices.itemWidget(item, 0))

    #print([method for method in dir(item) if callable(getattr(item, method))])
    #print(str(item.ItemType()))
    #print(str(item.text(col)))
    #print(str(item.child(0)))
    #print(str(item.childCount()))
    #print(str(item.child(1).text(0)))

    #print(str(self.view.panelInfoPatientUi.treeWidgetDevices.currentItem()))
#   titi = .itemWidget(item, columnIndex)
#   print(str(titi))
#   titi.text(0)
#   titi.data()
    #print(str(titi.labelFileName.text()))

    '''selectedItems = self.view.panelInfoPatientUi.treeWidgetDevices.selectedItems()
    for selectedItem in selectedItems:
        print(str(selectedItem.text(0)))
        print(str(selectedItem.text(1)))
        print(str(selectedItem.text(2)))    ''' 

    '''
    print(item.data(1, 0))
    print("column count " + str(data.columnCount()))
    print("AHYAAAAAAAAAA")'''

As i use "setItemWidget" method i expect to get a getItemWidget method and retreive data from it but no. How can i access to fileWidget.labelFileName ?

Thanks


Solution

  • I found the solution : I changed my creation methode :

        def addNodeToTreeview(self, data):
        self.panelInfoPatientUi.treeWidgetDevices.clear()
        for item in data: 
            mainWidgetItem = QtGui.QTreeWidgetItem(self.panelInfoPatientUi.treeWidgetDevices)
            widgetContainer = QtWidgets.QWidget()
            widgetContainer.setObjectName("widgetContainer") 
            deviceWidget = Ui_DeviceListviewWidget()
            deviceWidget.setupUi(widgetContainer)
    
            deviceWidget.labelSerialNumber.setText(item.serialNumber)
            deviceWidget.labelModel.setText(item.model)
            deviceWidget.labelInstallationDate.setText(item.installDate)
    
            mainWidgetItem.setSizeHint(0, widgetContainer.sizeHint())   
    
            self.panelInfoPatientUi.treeWidgetDevices.addTopLevelItem(mainWidgetItem)
            self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(mainWidgetItem, 0, widgetContainer)
    
            for files in item.listFile:
                #Files
    
                fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
                widgetContainerFiles = QtWidgets.QWidget()
                widgetContainerFiles.setObjectName("widgetContainerFiles")
    
                widgetContainerFiles.ui = Ui_FileListWidgetItem()
                widgetContainerFiles.ui.setupUi(widgetContainerFiles)
    
                widgetContainerFiles.ui.labelFileName.setText(files.fileName)
                widgetContainerFiles.ui.labelDateFile.setText(files.dateFile)
    
                fileWidgetItem.setSizeHint(0, widgetContainerFiles.sizeHint())
                mainWidgetItem.addChild(fileWidgetItem)
                self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)
    

    and i can get my data like that :

        def testest(self, item, col):
    
        print(str(item.treeWidget().itemWidget(item, col).ui.labelFileName.text()))