Search code examples
pythonpyqtpyqt5qtwidgets

How to control the checkbox using the Python itself, and not by a mouse click?


I created a checkbox using PyQT, which normally works using mouse clicks.

I want to know if there is a way with which I can uncheck and check the checkbox using the program itself, and not a mouse click. Basically I want to check and uncheck the box 10 times in 20 seconds and display it happening.

Here is my code for just the checkbox:

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QCheckBox, QWidget
from PyQt5.QtCore import QSize    

class ExampleWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(140, 40))    
        self.setWindowTitle("Checkbox") 

        self.b = QCheckBox("Yes",self)
        
        self.b.move(20,20)
        self.b.resize(320,40)

 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = ExampleWindow()
    mainWin.show()
    sys.exit( app.exec_() )

Solution

  • checked : bool

    This property holds whether the button is checked Only checkable buttons can be checked. By default, the button is unchecked.

    The QTimer class provides repetitive and single-shot timers. More ... https://doc.qt.io/qt-5/qtimer.html

    import sys
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtWidgets import QMainWindow, QLabel, QCheckBox, QWidget
    from PyQt5.QtCore import QSize    
    
    class ExampleWindow(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            self.setMinimumSize(QSize(140, 40))    
            self.setWindowTitle("Checkbox") 
    
            self.b = QCheckBox("Yes",self)
            
            self.b.move(20,20)
            self.b.resize(320,40)
            
            self.num = 0
            self.timer = QtCore.QTimer()
            self.timer.setInterval(2000)                 # msec
            self.timer.timeout.connect(self.update_now)
            self.timer.start()
    
        def update_now(self):
            self.b.setChecked(not self.b.isChecked())               # +++
            self.num += 1
            if self.num == 10: self.timer.stop()
    
     
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        mainWin = ExampleWindow()
        mainWin.show()
        sys.exit( app.exec_() )
    

    enter image description here