2012-10-04 2 views
2

J'ai donc essayé d'écrire une interface graphique en utilisant Python 3.3 et PyQt4. J'ai été à travers quelques tutoriels et je ne peux toujours pas comprendre comment avoir une case à cocher vérifiant et décochant le changement de déclencheur dans une variable globale. Je ne peux pas l'obtenir pour déclencher quoi que ce soit d'ailleurs parce que tous les tutoriels utilisent des méthodes qui ne fonctionneront pas pour moi.Python3 PyQt4 Création d'un simple QCheckBox et modification d'une variable booléenne

Le programme est trop grand pour copier ici dans son ensemble, donc je l'ai mis en place la structure de base du programme entourant les cases à cocher

import sys 
from PyQt4 import QtGui, QtCore 

ILCheck = False 

class SelectionWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(SelectionWindow, self).__init__(parent) 

     ILCheckbox = QtGui.QCheckBox(self) 
     ILCheckbox.setCheckState(QtCore.Qt.Unchecked) 

     MainLayout = QtGui.QGridLayout() 
     MainLayout.addWidget(ILCheckbox, 0, 0, 1, 1) 
     self.setLayout(MainLayout) 

C'est là où je suis coincé. Ce que je veux faire est de changer l'état de ILCheck en Vrai si le ILCheckbox est vérifié et le rendre à False quand il n'est pas coché. Je travaillais sur une journée entière et aucun tutoriel n'a été d'une grande aide.

Répondre

4

La case à cocher émet un événement stateChanged lorsque son état est modifié (vraiment!). Connectez-le à un gestionnaire d'événements:

import sys 

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class SelectionWindow(QMainWindow): 
    def __init__(self, parent=None): 
     super().__init__(parent) 

     self.ILCheck = False 

     ILCheckbox = QCheckBox(self) 
     ILCheckbox.setCheckState(Qt.Unchecked) 

     ILCheckbox.stateChanged.connect(self.ILCheckbox_changed) 

     MainLayout = QGridLayout() 
     MainLayout.addWidget(ILCheckbox, 0, 0, 1, 1) 

     self.setLayout(MainLayout) 

    def ILCheckbox_changed(self, state): 
     self.ILCheck = (state == Qt.Checked) 

     print(self.ILCheck) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    window = SelectionWindow() 

    window.show() 
    sys.exit(app.exec_()) 
+0

Merci. C'est étrange parce que l'éclipse ne me donne pas l'option de .connect après le stateChanged. Ca marche et tout, je trouve juste que c'est un peu étrange. – Lex

0

Essayez d'éviter l'utilisation de variables globales.

Au lieu de cela, faire la case à cocher un attribut de la fenêtre et tester son état directement:

class SelectionWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(SelectionWindow, self).__init__(parent) 
     self.ILCheckbox = QtGui.QCheckBox(self) 
     self.ILCheckbox.setChecked(QtCore.Qt.Unchecked) 
     MainLayout = QtGui.QGridLayout() 
     MainLayout.addWidget(self.ILCheckbox, 0, 0, 1, 1) 
     self.setLayout(MainLayout) 
... 

window = SelectionWindow() 
print window.ILCheckbox.isChecked()