2015-11-27 46 views
0

我现在创建了一个QTreeWidget,当我单击一个项目时,我想获取小部件数据。 我填补我QTreeWidget这样:在DoubleClick事件中从QTreeWidget获取ItemWidget

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) 

我连接部件那样:

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

,当我收到Click事件我无法访问我的小工具我试了几种方法:

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")''' 

因为我使用“setItemWidget”方法,我希望得到一个getItemWidget方法并从中检索数据,但是没有。我如何访问fileWidget.labelFileName?

感谢

+0

您可以访问您所添加的窗口小部件到树,又名'fileWidgetItem'。你不能访问任何'fileWidget',因为它们不在树中。在代码中,'fileWidgetItem'和'fileWidget'之间没有链接。 – Mel

+0

感谢您的回答。那么这是什么意思?我应该把隐藏的信息放在fileWidgetItem中吗?或者改变我创建TreeView的方式? – PyNico

回答

0

我找到了解决办法: 我改变了我的创作梅索德:

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) 

,我可以得到我的数据这样的:

def testest(self, item, col): 

    print(str(item.treeWidget().itemWidget(item, col).ui.labelFileName.text())) 
相关问题