PyQt QCheckBox

Resumo : neste tutorial, você aprenderá como usar a QCheckBoxclasse PyQt para criar um widget de caixa de seleção.

Introdução ao widget PyQt QCheckBox

A QCheckBoxclasse permite criar um widget de caixa de seleção, que pode ser ativado ou desativado. Para criar uma caixa de seleção usando a QCheckBoxclasse, siga estas etapas:

Primeiro, importe a QCheckBoxclasse:

from PyQt6.QtWidgets import QCheckBoxLinguagem de código:  JavaScript  ( javascript )

Segundo, crie uma nova instância da QCheckBoxclasse:

checkbox = QCheckBox(text)Linguagem de código:  Python  ( python )

O programa a seguir mostra uma janela que possui uma caixa de seleção:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QCheckBox, QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QCheckBox')
        self.setGeometry(100, 100, 320, 210)

        # create a grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # create a checkbox
        checkbox = QCheckBox('I agree', self)

        layout.addWidget(checkbox, 0, 0, Qt.AlignmentFlag.AlignCenter)

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())Linguagem de código:  Python  ( python )

Observe que o programa usa QGridLayoutpara colocar a caixa de seleção na janela.

Saída:

O sinal stateChanged

Uma caixa de seleção emite o stateChangedsinal sempre que você a marca ou desmarca.

Se quiser fazer algo quando a caixa de seleção estiver marcada ou desmarcada, você pode conectar um slot ao stateChangedsinal. Por exemplo:

checkbox = QCheckBox('I agree', self)
checkbox.stateChanged.connect(self.on_checkbox_changed)Linguagem de código:  Python  ( python )

O stateChangedsinal envia um valor que indica se o botão está marcado ou desmarcado. Para verificar o estado de a QCheckBox, você cria uma Qt.CheckStateinstância:

state = Qt.CheckState(value)Linguagem de código:  Python  ( python )

E compare-o com um dos três valores:

Estado Significado
Qt.CheckState.Checked Verificado
Qt.CheckState.Unchecked Desmarcado
Qt.CheckState.PartiallyChecked Parcialmente verificado

Observe que Qt.CheckState.PartiallyCheckedé usado para uma caixa de seleção tristate que será abordada em breve.

Por exemplo:

def on_checkbox_changed(self, value):
    state = Qt.CheckState(value)
    if state == Qt.CheckState.Checked:
        print('Checked')
    elif state == Qt.CheckState.Unchecked:
        print('Unchecked')Linguagem de código:  Python  ( python )

Além disso, você pode usar o isChecked()método para verificar se uma caixa de seleção está marcada.

A seguir mostramos um programa completo que exibe uma mensagem no console quando uma caixa de seleção é marcada ou desmarcada:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QCheckBox, QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QCheckBox')
        self.setGeometry(100, 100, 320, 210)

        # create a grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # create a checkbox
        checkbox = QCheckBox('I agree', self)
        checkbox.stateChanged.connect(self.on_checkbox_changed)

        layout.addWidget(checkbox, 0, 0, Qt.AlignmentFlag.AlignCenter)

        # show the window
        self.show()

    def on_checkbox_changed(self, value):
        state = Qt.CheckState(value)
        if state == Qt.CheckState.Checked:
            print('Checked')
        elif state == Qt.CheckState.Unchecked:
            print('Unchecked')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())Linguagem de código:  Python  ( python )

Configuração marcada ou desmarcada do PyQt QCheckBox programaticamente

A QCheckBoxclasse possui o setChecked()método que permite marcar ou desmarcar uma caixa de seleção programaticamente.

Se você passar Truepara o setChecked()método, a caixa de seleção estará marcada. Porém, se você passar Falsepara o setCheck()método, a caixa de seleção ficará desmarcada.

Além disso, você pode usar o setCheckState()método da QCheckBoxclasse para definir o estado da caixa de seleção. O setCheckState()método aceita um dos três valores de estado da Qt.CheckStateenumeração.

O programa a seguir ilustra como usar o setChecked()método para marcar e desmarcar uma caixa de seleção:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QCheckBox, QPushButton, QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QCheckBox')
        self.setGeometry(100, 100, 320, 210)

        # create a grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # create a checkbox
        self.checkbox = QCheckBox('I agree', self)

        check_button = QPushButton('Check', self)
        check_button.clicked.connect(self.check)

        uncheck_button = QPushButton('Uncheck', self)
        uncheck_button.clicked.connect(self.uncheck)

        layout.addWidget(self.checkbox, 0, 0, 0, 2,
                         Qt.AlignmentFlag.AlignCenter)
        layout.addWidget(check_button, 1, 0)
        layout.addWidget(uncheck_button, 1, 1)

        # show the window
        self.show()

    def check(self):
        self.checkbox.setChecked(True)

    def uncheck(self):
        self.checkbox.setChecked(False)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())Linguagem de código:  Python  ( python )

Saída:

Como funciona.

Primeiro, crie um checkbox e adicione-o ao atributo da classe:

self.checkbox = QCheckBox('I agree', self)Linguagem de código:  Python  ( python )

Ao tornar o checkbox um atributo da classe, podemos referenciá-lo em outros métodos dentro da mesma classe.

Segundo, crie dois QPushButtonwidgets e conecte cada um deles aos métodos check()e uncheck():

check_button = QPushButton('Check', self)
check_button.clicked.connect(self.check)

uncheck_button = QPushButton('Uncheck', self)
uncheck_button.clicked.connect(self.uncheck)Linguagem de código:  Python  ( python )

Terceiro, chame o setChecked()método com True para marcar a caixa de seleção no check()método:

def check(self):
    self.checkbox.setChecked(True)Linguagem de código:  Python  ( python )

Por fim, chame o setChecked()método com False para desmarcar a caixa de seleção do uncheck()método:

def uncheck(self):
    self.checkbox.setChecked(False)Linguagem de código:  Python  ( python )

Criando uma caixa de seleção tristate

Além de marcado e desmarcado, a QCheckBoxsuporta o terceiro estado que indica “sem alteração”. Nesse caso, uma caixa de seleção possui três estados:

  • Verificado
  • Desmarcado
  • Parcialmente verificado

Na prática, você usa uma caixa de seleção tristate para dar ao usuário a opção de não marcar nem desmarcar a caixa de seleção.

Para criar uma caixa de seleção tristate, você usa setTristate()para True:

checkbox.setTristate(True)Linguagem de código:  Python  ( python )

O programa a seguir mostra uma caixa de seleção tristate:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QCheckBox,  QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QCheckBox')
        self.setGeometry(100, 100, 320, 210)

        # create a grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # create a tristate checkbox
        self.checkbox = QCheckBox('A Tristate Checkbox', self)
        self.checkbox.setTristate(True)

        layout.addWidget(self.checkbox, 0, 0, Qt.AlignmentFlag.AlignCenter)

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())Linguagem de código:  Python  ( python )

Saída:

Resumo

  • Use a QCheckboxclasse para criar um widget de caixa de seleção.
  • O stateChangedsinal é emitido quando a caixa de seleção está marcada ou desmarcada.
  • Use o método setChecked()ou setState()para marcar ou desmarcar uma caixa de seleção programaticamente.
  • Use setTristate()o método para criar uma caixa de seleção tristate.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *