def __init__(self,parent,con,app,compareId,current_subcategory): QtGui.QDialog.__init__(self, parent) self.setModal(True) ### Настройки окна ### self.setWindowTitle(trUtf8(app,"Сравнение товаров")) # Создание главного Layout main_layout=QtGui.QGridLayout() # добавление 2 ячеек label_new=QtGui.QLabel(trUtf8(app,"<b>Название</b>")) main_layout.addWidget(label_new,0,0) label_new=QtGui.QLabel(trUtf8(app,"<b>Цена</b>")) main_layout.addWidget(label_new,1,0) # добавление названий и цен # цикл по всем выбранным к сравнению товарам for s in range(0,len(compareId)): current_comm=compareId[s] # текущий товар # добавление названия current_comm_name = queries.selectCommodityName(current_comm,con) label_new=QtGui.QLabel(trUtf8(app,"<b>"+str(current_comm_name)+"</b>")) main_layout.addWidget(label_new,0,s+1) # добавление цены current_comm_price = queries.selectCommodityPrice(current_comm,con) label_new=QtGui.QLabel(trUtf8(app,str(current_comm_price))) main_layout.addWidget(label_new,1,s+1) # получение инф-ции о характеристиках данной подкатегории # [(0-ch_name,1-ch_type,2-ch_id)...()] all_char=queries.selectAllFromCharacteristics(current_subcategory, con) # цикл по всем характеристикам for el in range(0,len(all_char)): current_char=all_char[el] # текущая характеристика #добавляем label с её названием label_new=QtGui.QLabel(trUtf8(app,"<b>"+current_char[0]+"</b>")) main_layout.addWidget(label_new,el+2,0) # цикл по всем выбранным к сравнению товарам for s in range(0,len(compareId)): current_comm=compareId[s] current_comm_value=queries.selectCharacteristicValue(current_comm, current_char[2], con) label_new=QtGui.QLabel(trUtf8(app,str(current_comm_value))) main_layout.addWidget(label_new,el+2,s+1) # добавление layout self.setLayout(main_layout)
def podcategor(self, value): ### изменяем текст слева ### self.label_left.setText(trUtf8(app,"Выберите требуемые характеристики товара:")) ### изменения на self.layout_right и self.layout_left ### при попадании из разных состояний if self.condition==2: it=self.layout_right.itemAt(4) self.layout_right.removeItem(it) if self.condition in (3,4): it=self.layout_right.itemAt(5) self.layout_right.removeItem(it) self.layout_right.removeWidget(self.widget_inner) self.widget_inner.deleteLater() if self.condition ==4: self.layout_left.removeWidget(self.scr) self.scr.deleteLater() self.layout_left.removeWidget(self.comparebtn) self.comparebtn.deleteLater() # сохранение информации о текущей подкатегории info=queries.selectCategoryId(value, con) self.current_subcategory=str(info[0][0]) # получение информации о характеристиках текущей подкатегории info=queries.selectAllFromCharacteristics(self.current_subcategory, con) # создание Widget и Layout для добавления на них элеметов self.widget_inner=QtGui.QWidget() self.widget_inner.setFixedWidth(self.RIGHTPARTWIDTH) self.layout_inner=QtGui.QVBoxLayout() # массивы с текущей информацией о набранных характеристиках self.widgets_array=[] self.ch_id_array=[] self.types_array=[] ### добавление элементов на widget_inner и в массив ### label_right3=QtGui.QLabel(trUtf8(app,"<center><b>Характеристики:</b></center>")) self.layout_inner.addWidget(label_right3) for el in info: # цикл по каждой характеристике из выбранной подкатегории # el[0] - ch_name, el[1] - ch_type, el[2] - ch_id # добавляем label с названием характеристики text_for_label=QtCore.QString("<center>") text_for_label.append(trUtf8(app,el[0])) text_for_label.append("</center>") label_next=QtGui.QLabel(text_for_label,self.widget_inner) self.layout_inner.addWidget(label_next) ### добавляем формы для ввода её значений ### if el[1]=='ran': ### если это не перечислимая характеристика ### # создаём горизонтальный layout для компоновки форм layout_next=QtGui.QHBoxLayout() # создаём формы lab_next_from=QtGui.QLabel(trUtf8(app,"От"),self.widget_inner) l_e_next_from=QtGui.QLineEdit(self.widget_inner) lab_next_to=QtGui.QLabel(trUtf8(app,"До"),self.widget_inner) l_e_next_to=QtGui.QLineEdit(self.widget_inner) # по-умолчанию ставим минимальное и максимальное значение из базы minVal=queries.selectMinValueForCertainCharacteristic(el[2],self.current_subcategory,con) l_e_next_from.setText(str(minVal)) maxVal=queries.selectMaxValueForCertainCharacteristic(el[2],self.current_subcategory,con) l_e_next_to.setText(str(maxVal)) # соединяем формы со слотом self.connect(l_e_next_from, QtCore.SIGNAL("textEdited(QString)"),self,QtCore.SLOT("changeRanChar(QString)")) self.connect(l_e_next_to, QtCore.SIGNAL("textEdited(QString)"),self,QtCore.SLOT("changeRanChar(QString)")) # сохраняем инфо в массивы с текущей информацией self.widgets_array.append(l_e_next_from) self.ch_id_array.append(el[2]) self.types_array.append('from') self.widgets_array.append(l_e_next_to) self.ch_id_array.append(el[2]) self.types_array.append('to') # добавляем формы на виджет layout_next.addWidget(lab_next_from) layout_next.addWidget(l_e_next_from) layout_next.addWidget(lab_next_to) layout_next.addWidget(l_e_next_to) # добавляем внутренний layout в layout self.layout_inner.addLayout(layout_next) else: ### если это перечислимая характеристика ### # получение из БД всех возможных уникальных значений перечисления info2=queries.selectAllDistinctEnumValues(el[2],self.current_subcategory,con) # создание Combo и добавление значений перечисления combo_new=QtGui.QComboBox() # добавление значения "не важно" combo_new.addItem(trUtf8(app,"не важно")) # добавление остальных значений for el2 in info2: combo_new.addItem(trUtf8(app,str(el2[0]))) # соединяем форму со слотом self.connect(combo_new, QtCore.SIGNAL("activated(QString)"),self,QtCore.SLOT("changeEnChar(QString)")) # сохраняем инфо в массивы с текущей информацией self.widgets_array.append(combo_new) self.ch_id_array.append(el[2]) self.types_array.append('en') # добавляем Combo на layout self.layout_inner.addWidget(combo_new) # добавляем небольшой отступ вниз self.layout_inner.addSpacing(self.CHARACSPACING) ### новое состояние ### # (стоит не в конце, т.к. changeChar требует 3 состояния) self.condition=3 ### создание лейбла "Найдено" и кнопки "Показать" ### self.found=QtGui.QLabel(trUtf8(app,"Найдено : "),self.widget_inner) self.showbtn=QtGui.QPushButton(trUtf8(app,"Показать")) self.connect(self.showbtn,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("showResults()")) # запуск слота (первое изменение хар-к) self.changeChar("init") # Размещение их на layout layout_bottom=QtGui.QHBoxLayout() layout_bottom.addWidget(self.found) layout_bottom.addWidget(self.showbtn) self.layout_inner.addLayout(layout_bottom) ### добавление всего на правый Layout ### self.widget_inner.setLayout(self.layout_inner) self.layout_right.addWidget(self.widget_inner) self.layout_right.addStretch()