Seite 1 von 1

Problem mit QCheckBox mit PyQt

Verfasst: Dienstag 3. April 2012, 14:54
von AlphaX2
Hallo Leute,

aus irgendeinem Grund mag meine QCheckBox nicht auslösen, was sie soll.
Hier der Code dazu:

Code: Alles auswählen

    def openSettingsDialog(self):
        self.dialogUi = loadUi('settingsDialog.ui')
        self.dialogUi.show()

        if self.dialogUi.checkBox_early.isChecked():
            self.dialogUi.earlyShiftLabel.setEnabled(True)
            self.dialogUi.spinBox_early.setEnabled(True)
        else:
            self.dialogUi.earlyShiftLabel.setEnabled(False)
            self.dialogUi.spinBox_early.setEnabled(False)

        self.dialogUi.dialogButtonBox.accepted.connect(self.nothing) #TODO!
Eigentlich folgen noch zwei weitere CheckBoxen, is aber erstmal egal. Ich weiß nur nich wieso er das

Code: Alles auswählen

setEnabled(True)
nicht kapieren will - bleibt immer ausgegraut. Steh ich irgendwo auf dem Schlauch oder was ist das Problem?

Vielen Dank.

AlphaX2

Re: Problem mit QCheckBox mit PyQt

Verfasst: Dienstag 3. April 2012, 15:19
von deets
Ich glaube nicht, dass man loadUi so verwenden sollte - denn damit erzeugst du doch immer wieder eine neue Instanz, und die hat natuerlich checkBox_early so gesetzt, wie es der Designer vorgibt - also im Zweifel eben mit isChecked() == False. Das waere zumindest mal mein Verdacht.

Und stilistisch ist das auch eher holperig - besser waere sowas hier:

Code: Alles auswählen

enabled = ...checkBox.isChecked()
for control in [self.dialogUi.a, self.dialogUi.b, ...]:
     control.setEnabled(enabled)
Damit tippst du um Groessenordnungen weniger, und bist schneller im erweitern/einschraenken der abhaengigen Controls.

Re: Problem mit QCheckBox mit PyQt

Verfasst: Dienstag 3. April 2012, 15:33
von AlphaX2
Also das loadUi wird eigentlich so verwendet - Gott wenn mir jetzt jemand sagt, dass das falsch ist.^^ - oh je! Mach ich immer so. :)
Nee eigentlich wird damit die Oberfläche aus dem *.ui File dynamisch geladen und richtig es entsteht eine weitere Instanz, neben der des Hauptfensters, was aber gewollt ist.

Stilistisch hab ich auch schon überlegt das zu ändern, z.B. mit einer Liste als Handler - deine Lösung is aber sehr schön, folglich werde ich die übernehmen! 8) Ursprünglich war eben nur ein einziges zu aktivierendes Element gedacht - da hätte das keine Rolle gespielt.

Diese stilistische Änderung bringt auch nichts, auch wenn mich das gewundert hätte. ;)

AlphaX2

Re: Problem mit QCheckBox mit PyQt

Verfasst: Dienstag 3. April 2012, 16:00
von deets
Kann sein, das loadUI so funktioniert. Aber was bleibt ist die Frage woher du erwartest, dass der Wahrheitswert der Checkbox dann veraendert ist. Wenn's immer eine neue Instanz erzeugt - dann ist da auch immer der Wert gleich, wie auch immer er im Designer gesetzt wurde.

Re: Problem mit QCheckBox mit PyQt

Verfasst: Dienstag 3. April 2012, 16:09
von AlphaX2
Okay ich hab es^^

Die Sache ist die, die QCheckBox hat nur EIN EINZIGES Signal nämlich "stateChanged" also muss man sowas bauen:

Code: Alles auswählen

self.ui.meineCheckBox.stateChanged.connect(self.stateControl)

def stateControl:
    if ... :
        ...setEnabled()
Ich dachte, dass das isChecked() ebenfalls ein Signal sei.

Danke trotzdem! ;)

AlphaX2