我正在为我的 PyQt6 项目制作一个搜索过滤器。其中一个过滤器元素应该显示搜索类别中的所有可用选项。
每个选项都是一个添加到 QVBoxLayout 中的 QCheckBox。在用选项填充布局后,它作为布局管理器安装在 QWidget 上,然后将其设置为 QScrollArea 小部件。 我希望 QCheckBox 选项在被点击时移动到其他未选中的选项之上。
有什么方法可以做到这一点? 在相关说明中,是否可以通过 PyQt 按字母顺序对 QCheckBox 进行排序(现在我只是传递一个带有选项文本的排序列表)?我想如果我也想对选中的选项进行排序,并且当一个选项未选中时将其放回按字母顺序排列的正确位置,我想我会需要它。
到目前为止,这是我的代码:
from PyQt6 import QtCore, QtWidgets
from database_handler import DatabaseHandler
class SearchParamGroup(QtWidgets.QWidget):
def __init__(self, group_title, db_column):
super(SearchParamGroup, self).__init__()
title_label = QtWidgets.QLabel(group_title)
reset_button = QtWidgets.QLabel('RESET') # It is just a placeholder for now
title_and_reset_hbox = QtWidgets.QHBoxLayout()
title_and_reset_hbox.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
title_and_reset_hbox.addWidget(title_label)
title_and_reset_hbox.addWidget(reset_button)
options_box = self.create_options_box(db_column)
group_vbox = QtWidgets.QVBoxLayout()
group_vbox.addLayout(title_and_reset_hbox)
group_vbox.addWidget(options_box)
self.setLayout(group_vbox)
@staticmethod
def create_options_box(db_column_from_init):
scroll_area_widget_vbox = QtWidgets.QVBoxLayout()
group_options = DatabaseHandler.get_distinct_values(db_column_from_init)
for option_name in group_options:
option_checkbox = QtWidgets.QCheckBox(option_name)
scroll_area_widget_vbox.addWidget(option_checkbox)
scroll_area = QtWidgets.QScrollArea()
scroll_area_widget = QtWidgets.QWidget()
scroll_area_widget.setLayout(scroll_area_widget_vbox)
scroll_area.setWidget(scroll_area_widget)
return scroll_area