前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PySide6 GUI 编程(8):QCheckBox的使用

PySide6 GUI 编程(8):QCheckBox的使用

原创
作者头像
bowenerchen
发布2024-07-21 12:44:13
1591
发布2024-07-21 12:44:13
举报
文章被收录于专栏:编码视界

基础用法

单选框

示例代码

代码语言:python
代码运行次数:0
复制
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QCheckBox, QMainWindow


def show_check_state(state: int):
    print('checkbox state:', Qt.CheckState(state))


class MyCheckBox(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('CheckBox')
        my_checkbox = QCheckBox('TestCheckBox')
        # my_checkbox.setCheckable(False)
        my_checkbox.stateChanged.connect(show_check_state)
        self.setCentralWidget(my_checkbox)


if __name__ == '__main__':
    app = QApplication()
    ins = MyCheckBox()
    ins.show()
    app.exec()

运行效果

运行效果
运行效果

CheckBox 可以设置为三态属性

示例代码

代码语言:python
代码运行次数:0
复制
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QCheckBox, QMainWindow


def show_check_state(state: int):
    print('checkbox state:', Qt.CheckState(state))


class MyCheckBox(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('CheckBox')
        my_checkbox = QCheckBox('TestCheckBox')
        # my_checkbox.setCheckable(False)  # 默认不可勾选
        # my_checkbox.setCheckState(Qt.CheckState.Checked) # 默认已经被勾选
        # my_checkbox.setChecked(True) # 默认已经被勾选
        my_checkbox.setTristate(True)
        my_checkbox.stateChanged.connect(show_check_state)
        self.setCentralWidget(my_checkbox)


if __name__ == '__main__':
    app = QApplication()
    ins = MyCheckBox()
    ins.show()
    app.exec()

运行效果

三态属性效果
三态属性效果

基于 CheckBox 实现多选、全选、全不选效果

核心设置

核心设置
核心设置

完整代码示例

代码语言:python
代码运行次数:0
复制
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QCheckBox, QMainWindow, QVBoxLayout, QWidget


class MyMultiCheckBox(QMainWindow):
    def __init__(self):
        super().__init__()
        self.root_checkbox = QCheckBox('顶层三态可选框')
        self.root_checkbox.setTristate(True)  # 设置三态
        v_layout = QVBoxLayout()
        v_layout.addWidget(self.root_checkbox)
        self.check_boxes = []
        self.all_option_checkbox_count = 3
        self.option_checked_count = 0
        for i in range(0, self.all_option_checkbox_count):
            option_checkbox = QCheckBox('单选选项-{}'.format(i))  # 子单选框
            option_checkbox.setCheckable(True)  # 设置允许勾选
            option_checkbox.setCheckState(Qt.CheckState.Unchecked)  # 设置默认为未勾选
            self.check_boxes.append(option_checkbox)
            v_layout.addWidget(option_checkbox)
            # 每个option_checkbox 被勾选或不被勾选时,都需要更新 root_checkbox 的状态
            option_checkbox.checkStateChanged.connect(self.update_root_checkbox_state)

        # 更改 root_checkbox 的状态时,同时更新 option_checkbox 的状态
        self.root_checkbox.checkStateChanged.connect(self.update_option_checkbox_state)

        container = QWidget()
        container.setLayout(v_layout)
        self.setCentralWidget(container)

    def update_root_checkbox_state(self, state: Qt.CheckState):
        print('option_check_box change state to: {}'.format(state))
        if state == Qt.CheckState.Checked:
            self.option_checked_count += 1
            print('option_check_box += 1')
        elif state == Qt.CheckState.Unchecked:
            self.option_checked_count -= 1
            print('option_check_box -= 1')
        print('option_checked_count = {}'.format(self.option_checked_count))
        if self.option_checked_count <= 0:
            self.option_checked_count = 0
            self.root_checkbox.setCheckState(Qt.CheckState.Unchecked)
        elif self.option_checked_count >= self.all_option_checkbox_count:
            self.option_checked_count = self.all_option_checkbox_count
            self.root_checkbox.setCheckState(Qt.CheckState.Checked)
        elif self.all_option_checkbox_count > self.option_checked_count > 0:
            self.root_checkbox.setCheckState(Qt.CheckState.PartiallyChecked)

    def update_option_checkbox_state(self, state: Qt.CheckState):
        print('root_checkbox change state to: {}'.format(state))
        # 全选
        if state == Qt.CheckState.Checked:
            for v in self.check_boxes:
                if v.checkState() != Qt.CheckState.Checked:
                    v.setCheckState(Qt.CheckState.Checked)
            if self.option_checked_count >= self.all_option_checkbox_count:
                self.option_checked_count = self.all_option_checkbox_count
        # 全不选
        elif state == Qt.CheckState.Unchecked:
            for v in self.check_boxes:
                if v.checkState() != Qt.CheckState.Unchecked:
                    v.setCheckState(Qt.CheckState.Unchecked)
        # 只选部分
        elif state == Qt.CheckState.PartiallyChecked:
            pass


if __name__ == '__main__':
    app = QApplication()
    ins = MyMultiCheckBox()
    ins.show()
    app.exec()

运行效果

多选框操作示例
多选框操作示例

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础用法
    • 单选框
      • 示例代码
      • 运行效果
    • CheckBox 可以设置为三态属性
      • 示例代码
      • 运行效果
  • 基于 CheckBox 实现多选、全选、全不选效果
    • 核心设置
      • 完整代码示例
        • 运行效果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档