如果列中的 1 没有任何值,则隐藏 QTableWidget 中的行
Hiding rows in QTableWidget if 1 of the column does not have any values
我想对我编写的一部分代码提出一些意见。我的 UI 由一个 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)
您可以使用 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()
我想对我编写的一部分代码提出一些意见。我的 UI 由一个 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)
您可以使用 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()