Python Forum
[PyQt] choose checkbox - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [PyQt] choose checkbox (/thread-39434.html)



choose checkbox - devilonline - Feb-16-2023

Hi, I have this code with pyqt5:

    elif (content1 == "next"):
            todos = ["one" , "two" , "three" , "four", "five"]
            self.todo_listWidget.show()
            for todo in todos:
                item = QListWidgetItem(todo)
                item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
                item.setCheckState(QtCore.Qt.Unchecked) 

                self.todo_listWidget.addItem(item)
And I want if i chose one item make something
like if item (x) is checked then do something



how can i do this?


RE: choose checkbox - Axel_Erfurt - Feb-17-2023

Getting signals from QListWidgetItem is difficult, QCheckbox is easier

from PyQt5.QtWidgets import (QMainWindow, QApplication, QVBoxLayout, 
                             QWidget, QCheckBox)
                             
from PyQt5.QtCore import Qt

class mainWin(QMainWindow):
    def __init__(self, parent = None):
        super(mainWin, self).__init__(parent)
        self.setupUI()
        
    def setupUI(self):
        self.setGeometry(0, 0, 800, 600)
        central_widget = QWidget()
        vbox = QVBoxLayout()
                
        todos = ["one" , "two" , "three" , "four", "five"]
        self.todo_listWidget = QVBoxLayout()
        for todo in todos:
            item = QCheckBox(text = todo)
            item.setCheckState(Qt.Unchecked)
            item.stateChanged.connect(self.test)
                    
            self.todo_listWidget.addWidget(item)
            
        vbox.addLayout(self.todo_listWidget)
        
        vbox.addWidget(QWidget())
        
        central_widget.setLayout(vbox)
        self.setCentralWidget(central_widget)
        
        
    def test(self):
        action = self.sender()
        if action:
            state = action.checkState()
            name = action.text() 
            print(f"{name} state: {state}") 


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = mainWin()
    win.setWindowTitle("Main Window")
    win.show()

    sys.exit(app.exec_())