Ich versuche, eine Reihe von Dateien, die dics sind, zu laden und dann Arrays von innerhalb von dics zu meinem QTreeView zu laden und dann in der Lage zu sein, diese dics zu bearbeiten. Ich habe ein Problem, wenn es darum geht, Signal zu verbinden, da es alle Knöpfe mit 1 Daten verbindet - zuletzt erstellt. Wenn ich 20 Arrays von 1 dict laden, sollte ich in der Lage sein, auf jedes Array zu klicken und seinen Namen auszudrucken. Im Moment druckt es nur den zuletzt hinzugefügten Namen. HierPyQT QTreeview + QPushButton/QCombobox Signale
ist der Code:
def add_data(self):
for subdir, dirs, files in os.walk(self.dat_folder):
for file_inx, file_name in enumerate(files):
''' loading file '''
''' creating data'''
if len(data[1]) >0:
#file_inx = file_inx + 1 # not sure if I need this tbd.
job = QStandardItem(project_name)
self.model.setItem(file_inx,0,job)
self.model.setItem(file_inx, 1, QStandardItem(project_time_day+" "+project_time_time))
for inx, layers in enumerate(data[1]):
child1 = QStandardItem(layers["Name"])
child2 = QStandardItem("Push Button or Combobox or QCheckBox")
job.insertRow(inx,[child1, child2])
b=QPushButton("TestPrint"+str(inx))
b.clicked.connect(lambda: self.printData(child1.text(),layers["Name"]))
a = self.model.index(file_inx, 0) #find parent
i = a.child(inx,7) # find parented location
self.tv_job_list.setIndexWidget(i,b) # replace child2 with QPushButton - b
def printData(self,value,name):
print value,name
Hier ist, wie die QTreeView aussieht, jeder Job Hunderte von job_names haben kann und es können Hunderte von Job_01 etc etc ... Es ist eine große Liste sein: -) 1 Datei auf HDD erstellt 1 Elternteil, der untergeordnete Jobs erstellt.
Parent > JOB_01
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
... x 1000 Childs...
Parent > JOB_01
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
Child > Job_Name | Job_Submit_Date | QComboBox | QPushButton | QCheckBox
... x 1000 Childs...
Sie neu initialisieren die QPushButton jedes Mal das Innere für Loop-Schleifen, so macht es Sinn, dass nur die letzte Reihe zeigen würde. Sie überschreiben die ersten 19 in der for-Schleife, so dass die Schaltfläche nur mit dem 20. Array verbunden ist. –
Ja, ich weiß, das ist das Problem, vor dem ich stehe ... Wie kann ich es NICHT übersteuern? – Bobby
Nimm es aus der Schleife und verbinde stattdessen den Knopf mit einer Methode, die durch 'data [1]' läuft und die Daten ausdruckt. –