Я пытаюсь загрузить серные файлы, которые являются dics, а затем загружает массивы изнутри в dics в мой QTreeView, а затем сможет редактировать эти данные. У меня есть проблема, когда речь идет о подключении сигнала, когда он соединяет все кнопки с 1 данными - последний созданный. Если я загружаю 20 массивов из 1 dict, я должен иметь возможность нажимать на каждый массив и печатать его имя. Сейчас он просто печатает последнее добавленное имя.PyQT QTreeview + QPushButton/QCombobox сигналы
Вот код:
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
Вот как QTreeView выглядит, каждая работа может иметь сотни job_names и могут быть сотни Job_01 и т.д. и т.п. ... Его большой список: -) 1 файл на HDD создает 1 родительский элемент, который создает дочерние задания.
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...
Вы переинициализировать QPushButton каждый раз, когда внутри для петель петли, так что имеет смысл, что только последний массив будет показывать. Вы переопределяете первые 19 в цикле for, поэтому кнопка подключается только к 20-му массиву. –
Да, я знаю, что проблема, с которой я сталкиваюсь ... как НЕ переопределить ее? – Bobby
Выньте его из цикла и вместо этого подключите кнопку к методу, который будет проходить через 'data [1]' и распечатывать данные. –