如何将单击的 QCheckBox 小部件移到其他复选框上方?

问题描述 投票:0回答:0

我正在为我的 PyQt6 项目制作一个搜索过滤器。其中一个过滤器元素应该显示搜索类别中的所有可用选项。

Example

每个选项都是一个添加到 QVBoxLayout 中的 QCheckBox。在用选项填充布局后,它作为布局管理器安装在 QWidget 上,然后将其设置为 QScrollArea 小部件。 我希望 QCheckBox 选项在被点击时移动到其他未选中的选项之上。

Like that

有什么方法可以做到这一点? 在相关说明中,是否可以通过 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
python pyqt
© www.soinside.com 2019 - 2024. All rights reserved.