2016-09-29 2 views
1

Je voulais des opinions sur une partie du code que j'ai écrit. Mon interface utilisateur se compose d'un QTableWidget dans lequel il a 2 colonnes, où l'une des 2 colonnes sont remplies avec QComboBox. Pour la première colonne, il remplira les cellules avec la liste des plates-formes de caractères (chemin complet) qu'il trouve dans la scène, tandis que la deuxième colonne créera une zone de liste déroulante par cellule et il apparaîtra dans les options de couleur en tant que L'option vient d'un fichier json.Cacher des lignes dans QTableWidget si 1 de la colonne n'a aucune valeur

En ce moment j'essaye de créer des boutons radio qui donnent à l'utilisateur la possibilité d'afficher tous les résultats, ou il cachera ces rangées s'il n'y a aucune option de couleur dans la liste déroulante pour cette rangée particulière.

Comme vous pouvez le voir dans mon code, je remplis les données par colonne, et donc, quand j'ai essayé de mettre if not len(new_sub_name) == 0: alors qu'il ne met pas de combobox avec zéro options, mais comment puis-je cacher ces lignes où il n'y a pas d'options dans la liste déroulante?

def populate_table_data(self): 
    self.sub_names, self.fullpaths = get_chars_info() 

    # Output Results 
    # self.sub_names : ['/character/nicholas/generic', '/character/mary/default'] 
    # self.fullpaths : ['|Group|character|nicholas_generic_001', '|Group|character|mary_default_001'] 

    # Insert fullpath into column 1 
    for fullpath_index, fullpath_item in enumerate(self.fullpaths): 
     new_path = QtGui.QTableWidgetItem(fullpath_item) 
     self.character_table.setItem(fullpath_index, 0, new_path) 
     self.character_table.resizeColumnsToContents() 

    # Insert colors using itempath into column 2 
    for sub_index, sub_name in enumerate(self.sub_names): 
     new_sub_name = read_json(sub_name) 

     if not len(new_sub_name) == 0: 
      self.costume_color = QtGui.QComboBox() 
      self.costume_color.addItems(list(sorted(new_sub_name))) 
      self.character_table.setCellWidget(sub_index, 1, self.costume_color) 

Répondre

2

Vous pouvez masquer des lignes à l'aide de setRowHidden. En ce qui concerne le reste du code, je ne vois pas beaucoup de mal à ce que vous avez actuellement, mais FWIW j'écrire quelque chose comme ça (complètement non testé, bien sûr):

def populate_table_data(self): 
    self.sub_names, self.fullpaths = get_chars_info() 
    items = zip(self.sub_names, self.fullpaths) 
    for index, (sub_name, fullpath) in enumerate(items): 
     new_path = QtGui.QTableWidgetItem(fullpath) 
     self.character_table.setItem(index, 0, new_path) 
     new_sub_name = read_json(sub_name) 
     if len(new_sub_name): 
      combo = QtGui.QComboBox() 
      combo.addItems(sorted(new_sub_name)) 
      self.character_table.setCellWidget(index, 1, combo) 
     else: 
      self.character_table.setRowHidden(index, True) 

    self.character_table.resizeColumnsToContents() 
+0

Hey merci, mais toutes les idées sur comment je peuple mes données? – dissidia

+0

@dissidia. Vous ne savez pas à quel point c'est utile pour vous, mais j'ai élargi un peu ma réponse. – ekhumoro

+0

Je vais être sûr de vérifier, oublié d'apporter mon code à la maison. Mais même ainsi, puis-je demander pourquoi '(sub_name, fullpath)' entre parenthèses? Je suppose que c'est simplement optimiser et rendre mon code plus court? – dissidia