2016-09-29 4 views
1

Я хотел получить некоторые мнения о части кода, который я написал. Мой пользовательский интерфейс состоит из QTableWidget, в котором он имеет 2 столбца, где один из 2 столбцов заполнен QComboBox.Скрытие строк в QTableWidget, если 1 из столбца не имеет значений

Для первого столбца он заполнит ячейки списком установок символов (полный путь), которые он обнаружит в сцене, а второй столбец создаст поле со списком на ячейку, и оно будет заполнено в цветовых вариантах, как вариант происходит из json-файла.

В настоящее время я пытаюсь создать несколько переключателей, которые дают пользователю возможность показывать все результаты, или они будут скрывать эти строки, если в этой строке не указаны параметры цвета в поле со списком.

Как вы можете видеть в моем коде, я заполняю данные за столбец, и поэтому, когда я попытался поместить if not len(new_sub_name) == 0:, пока он не помещает никаких комбобокс с нулевыми параметрами, но как мне скрывать такие строки, в которых нет параметров в выпадающем списке?

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) 

ответ

2

Скрыть строки можно с помощью setRowHidden. Что касается остальной части кода, я не вижу много плохого, что вы в настоящее время, но FWIW я хотел бы написать что-то вроде этого (совершенно непроверенную, конечно):

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

Эй спасибо, но какие-либо идеи о том, как я заполняю свои данные? – dissidia

+0

@dissidia. Не уверен, насколько он полезен для вас, но я немного расширил свой ответ. – ekhumoro

+0

Я обязательно проверю это, забыл вернуть свой код домой. Но даже в этом случае, могу ли я спросить, почему «(под_имя, полный путь)» заключены в скобки? Думаю, это просто оптимизация и сокращение моего кода? – dissidia