Скрытие строк в QTableWidget, если 1 столбца не имеет значений

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

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

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

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

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)

1 ответ

Решение

Вы можете скрыть строки, используя 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()
Другие вопросы по тегам