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()
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()
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 删除。