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_())