Triggern von dynamisch generierten Checkboxen
Verfasst: Donnerstag 18. Juni 2015, 20:54
Hallo!
Im Moment vezweifele ich daran, eine dynamische Anzahl von QCheckBox-Elementen zu generieren, die ein jeweils zugehöriges QLineEdit-Element freigeben bzw. sperren.
Unten das Minimalbeispiel.
Dabei meldet sich der Fehler File "D:\python\slmauto\slmgui-minimum.py", line 34, in __init__
self.check.toggled.connect(self.invertcheck(i))
TypeError: argument 1 has unexpected type 'NoneType'
Wenn ich die Zeile ausklammere, werden keine Fehler mehr generiert und das GUI sieht aus, wie es vorgesehen ist.
Ich kann mir leider nicht erklären wo der Fehler liegt
Achja, wenn ich statt
einfach schreibe
dann kommt die Fehlermeldung File "D:\python\slmauto\slmgui-minimum.py", line 48, in invertcheck
self.code.setEnabled(True)
AttributeError: 'int' object has no attribute 'setEnabled'
Daher der Umweg mit der append-Funktion. Gibt es hier vielleicht auch eine elegantere Lösung?
Viele Grüße
hueschel
Im Moment vezweifele ich daran, eine dynamische Anzahl von QCheckBox-Elementen zu generieren, die ein jeweils zugehöriges QLineEdit-Element freigeben bzw. sperren.
Unten das Minimalbeispiel.
Dabei meldet sich der Fehler File "D:\python\slmauto\slmgui-minimum.py", line 34, in __init__
self.check.toggled.connect(self.invertcheck(i))
TypeError: argument 1 has unexpected type 'NoneType'
Wenn ich die Zeile
Code: Alles auswählen
self.check[i].toggled.connect(self.invertcheck(i))
Ich kann mir leider nicht erklären wo der Fehler liegt

Achja, wenn ich statt
Code: Alles auswählen
self.code = []
self.code.append(QLineEdit())
self.code.append(QLineEdit())
self.code.append(QLineEdit())
self.code.append(QLineEdit())
einfach schreibe
Code: Alles auswählen
self.code = [0]*4
self.code.setEnabled(True)
AttributeError: 'int' object has no attribute 'setEnabled'
Daher der Umweg mit der append-Funktion. Gibt es hier vielleicht auch eine elegantere Lösung?
Viele Grüße
hueschel
Code: Alles auswählen
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class Dialog(QDialog):
def __init__(self):
super(Dialog, self).__init__()
SamplesGroupBox = QGroupBox("Samples:")
sampleslayout = QGridLayout()
self.check = []
self.check.append(QCheckBox())
self.check.append(QCheckBox())
self.check.append(QCheckBox())
self.check.append(QCheckBox())
self.code = []
self.code.append(QLineEdit())
self.code.append(QLineEdit())
self.code.append(QLineEdit())
self.code.append(QLineEdit())
for i in range(1,4):
self.check[i] = QCheckBox("Sample #" + str(i))
self.check[i].setChecked(True)
sampleslayout.addWidget(self.check[i], 2*i-1, 0)
self.check[i].toggled.connect(self.invertcheck(i))
self.code[i] = QLineEdit()
sampleslayout.addWidget(QLabel("sample code:"), 2*i, 1)
sampleslayout.addWidget(self.code[i], 2*i, 2)
self.code[i].setEnabled(True)
SamplesGroupBox.setLayout(sampleslayout)
self.setWindowTitle("slmgui")
mainlayout = QVBoxLayout()
mainlayout.addWidget(SamplesGroupBox)
self.setLayout(mainlayout)
def invertcheck(self,i):
if self.check[i].isChecked():
self.code[i].setEnabled(True)
else:
self.code[i].setDisabled(True)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
dialog = Dialog()
sys.exit(dialog.exec_())