Problem mit QCheckBox mit PyQt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

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
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.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

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
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.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

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
Antworten