728x90
반응형
from PySide2.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
                                QLabel, QFrame, QSizePolicy, 
                                QPushButton, QFileDialog, QMessageBox,
                                QLineEdit, QComboBox, 
                                QSpinBox, QSlider, QProgressBar,
                                QCheckBox, QGroupBox,
                                )

from PySide2.QtGui import (
    QPixmap, QImage, QColorSpace, 
    QIntValidator, QDoubleValidator, QRegExpValidator
)

from PySide2.QtCore import Qt, QRegExp

import sys

class MainWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        
        self.allChecked = False

        self.appleCheckBox = QCheckBox("apple")
        self.grapeCheckBox = QCheckBox("grape")
        self.bananaCheckBox = QCheckBox("banana")

        # self.appleCheckBox.toggled.connect(self.onToggled)
        # self.grapeCheckBox.toggled.connect(self.onToggled)
        # self.bananaCheckBox.toggled.connect(self.onToggled)
        self.appleCheckBox.clicked.connect(self.onClickToggle)
        self.grapeCheckBox.clicked.connect(self.onClickToggle)
        self.bananaCheckBox.clicked.connect(self.onClickToggle)

        layout = QVBoxLayout()
        layout.addWidget(self.appleCheckBox)
        layout.addWidget(self.grapeCheckBox)
        layout.addWidget(self.bananaCheckBox)

        self.groupBox = QGroupBox("그룹")
        self.groupBox.setLayout(layout)
        # self.groupBox.setCheckable(True)

        # self.groupBox.setChecked()
        
        self.button = QPushButton("전체선택")
        self.button.clicked.connect(self.onClickToggleAll)

        # self.button.setText("전체해제")

        self.allCheckBox = QCheckBox("전체선택")
        # self.allCheckBox.toggled.connect(self.onToggledAll)
        self.allCheckBox.clicked.connect(self.onClickToggleAll)
        

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.groupBox)
        mainLayout.addWidget(self.button)
        mainLayout.addWidget(self.allCheckBox)


        self.setLayout(mainLayout)
        self.setWindowTitle("QGroupBox QFrame Example")
        self.resize(500,500)

        pass

    def onClickToggle(self):
        print("onClickToggle:: ")

        # self.appleCheckBox.isChecked()
        # self.grapeCheckBox.isChecked()
        # self.bananaCheckBox.isChecked()

        # 전체선택 버튼과 체크박스의 상태변경 (전체해체 or 전체선택, 체크박스의 체크 포함)
        # all = True
        all = (
            self.appleCheckBox.isChecked() 
            and self.grapeCheckBox.isChecked() 
            and self.bananaCheckBox.isChecked()
        )

        self.allChecked = all

        if all:
            self.button.setText("전체해제")
            self.allCheckBox.setText("전체해제")
            self.allCheckBox.setChecked(True)
        else:
            self.button.setText("전체선택")
            self.allCheckBox.setText("전체선택")
            self.allCheckBox.setChecked(False)

        pass

    # def onToggled(self, toggled):
    #     print("onToggled:: toggled: ", toggled)

    #     # self.appleCheckBox.isChecked()
    #     # self.grapeCheckBox.isChecked()
    #     # self.bananaCheckBox.isChecked()


    #     # 전체선택 버튼과 체크박스의 상태변경 (전체해체 or 전체선택, 체크박스의 체크 포함)
    #     # all = True
    #     all = (
    #         self.appleCheckBox.isChecked() 
    #         and self.grapeCheckBox.isChecked() 
    #         and self.bananaCheckBox.isChecked()
    #     )

    #     self.allChecked = all

    #     if all:
    #         self.button.setText("전체해제")
    #         self.allCheckBox.setText("전체해제")
    #         self.allCheckBox.setChecked(True)
    #     else:
    #         self.button.setText("전체선택")
    #         self.allCheckBox.setText("전체선택")
    #         self.allCheckBox.setChecked(False)

    #     pass


    def onToggledAll(self, toggled):
        print("onToggledAll:: toggled: ", toggled)

        self.appleCheckBox.setChecked(toggled)
        self.grapeCheckBox.setChecked(toggled)
        self.bananaCheckBox.setChecked(toggled)

        self.allChecked = toggled

        if toggled:
            self.button.setText("전체해제")
            self.allCheckBox.setText("전체해제")
            # self.allCheckBox.setChecked(True)
        else:
            self.button.setText("전체선택")
            self.allCheckBox.setText("전체선택")
            # self.allCheckBox.setChecked(False)

        pass

    def onClickToggleAll(self):
        print("onClickToggle::")
        # self.groupBox.setChecked(True)

        #  allChecked 가 참(True)이면 거짓(False)으로, 거짓이면 참으로 반전
        all = not self.allChecked

        self.onToggledAll(all)
        self.allCheckBox.setChecked(all)




        # # 반전
        # # self.appleCheckBox.setChecked(not self.appleCheckBox.isChecked)

        # self.appleCheckBox.setChecked(all)
        # self.grapeCheckBox.setChecked(all)
        # self.bananaCheckBox.setChecked(all)

        # self.allChecked = all

        # # self.groupBox.children()

        # # 1.버튼의 상태를 변경, 문구, 두가지 set(쓰기), get(읽어옴)
        #     # 국수, 라면, 삼겹살 .py 문구를 변경하는게 있어요..
        # # 2.여기에서 순서도에서 마름모꼴이 의미하는바, 그 의미와 연결된 명령
        # # 어떤상태를 기준으로 '전체해제', '전체선택'
        # # if 조건

        # # 버튼의 문구를 변경
        # # self.button.setText("전체해제")

        # # 버튼 문구가 전체선택의 상태에 따라 다르게 적용
        # # 전체가 선택되었을때에는 "전체해제", 반대의 경우는 "전체선택", if문 사용

        # # all이 참이면 버튼의 문구를 "전체해제", 거짓이면 버튼의 문구를 "전체선택"
        # if all:
        #     self.button.setText("전체해제")
        #     self.allCheckBox.setText("전체해제")
        #     self.allCheckBox.setChecked(True)
        # else:
        #     self.button.setText("전체선택")
        #     self.allCheckBox.setText("전체선택")
        #     self.allCheckBox.setChecked(False)
        # pass

        # # self.allCheckBox.setChecked(all)


if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    app.setStyleSheet("QCheckBox{font-size: 30pt;} QPushButton{font-size: 30pt;}")


    
    mainWindow = MainWindow()
    mainWindow.show()

    app.exec_()

728x90
반응형

'Qt' 카테고리의 다른 글

serial_write_read++Qt  (0) 2022.11.04
serial_Write and Read  (0) 2022.11.04
label  (0) 2022.11.04
spinbox_slider_progressorBar  (0) 2022.11.04
test  (0) 2022.11.04

+ Recent posts