def test_basa(self): print 24, "test_basa" inp = [5, 4, 3, 2, 1, 0.5, 0.2, 0.1] from basa_sort import BasaSort for i in [0, 1, 2, 3, 4, 5, 6, 7, 8]: b = BasaSort() data = b.output_data(i, inp) x = i if x == 0: pr = dvut(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5], inp[6]) elif x == 1: pr = shvel(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5], inp[6], inp[7]) elif x == 2: pr = ugol(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5]) elif x == 3: pr = truba_pryam(inp[0], inp[1], inp[2], inp[3], inp[4]) elif x == 4: pr = ring(inp[0], inp[1]) elif x == 5: pr = sost_ugol_tavr_st_up(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5], inp[6]) elif x == 6: pr = sost_ugol_tavr_st_right(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5], inp[6]) elif x == 7: pr = sost_ugol_tavr_st_krest(inp[0], inp[1], inp[2], inp[3], inp[4], inp[5], inp[6], inp[7]) elif x == 8: pr = rectangle(inp[0], inp[1]) self.assertEquals(data.output_dict(), pr.output_dict())
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("gui/sort_solve.ui", self) basa=BasaSort() for text in basa.key_sortament(): self.listWidget.addItem(text) self.listWidget.currentItemChanged.connect(table_head) self.inputtable.currentItemChanged.connect(table_clear_output) self.solvebutton.clicked.connect(solve) self.wordbutton.clicked.connect(toword) self.wordbutton.setEnabled(False)
def table_head(): table_clear() lab=window.listWidget.currentItem().text() basa=BasaSort() input_data=basa.input_data(lab) window.inputtable.setColumnCount(len(input_data)) window.inputtable.setHorizontalHeaderLabels(input_data) pict=basa.pict(lab) try: window.picture.setPixmap(QtGui.QPixmap(pict)) except(): window.messege.clear() window.messege.insert(u"Ошибка исходных данных") for i in range(0, window.inputtable.columnCount()): window.inputtable.setItem(0, i, QtGui.QTableWidgetItem(""))
def solve(): window.messege.clear() try: lab=window.listWidget.currentItem().text() countcolumn=window.inputtable.columnCount() input_list=[] for i in range(0, countcolumn): if window.inputtable.item(0, i).text()=="": window.inputtable.item(0, i).setText("0") if "," in window.inputtable.item(0, i).text(): text=window.inputtable.item(0, i).text() text=text.replace(',','.') window.inputtable.item(0, i).setText(text) input_list.append(float(window.inputtable.item(0, i).text().replace(',','.'))) basa=BasaSort() pr=basa.output_data(lab, input_list) window.outputtable.setColumnCount(len(pr.output_list())) window.outputtable.setHorizontalHeaderLabels(pr.output_list()) j=0 for i in pr.output_list(): if type(pr.output_dict()[i])==type(0.1): txt="%.2f"%(pr.output_dict()[i]) else: txt=pr.output_dict()[i] window.outputtable.setItem(0,j,QtGui.QTableWidgetItem(txt)) window.outputtable.item(0,j).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) j=j+1 except (ValueError, AttributeError, ZeroDivisionError): window.messege.clear() window.messege.insert(u"Ошибка исходных данных") window.wordbutton.setEnabled(False) else: window.messege.insert(u"Расчет выполнен успешно") window.wordbutton.setEnabled(True)
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("gui/solve_number_steel.ui", self) self.basa=BasaSort() #Загрузка и установка рассчитываемых типов self.list_type_element=[u'Ферма', u'Балка'] # self.list_type_element=[u'Ферма',u'Балка'] self.list_code=self.basa.list_code() self.load_combobox(self.type_element, self.list_type_element) self.type_element.currentIndexChanged["const QString&"].connect(self.load_sect) #Очистка таблицы вывода self.output_table.clear() self.output_table.setColumnCount(0) self.output_table.setRowCount(0) #установка флажков self.flag_current_code=QtCore.QString(self.list_code[0]) self.flag_current_count=1 self.flag_current_type_element=QtCore.QString(self.list_type_element[0]) self.flag_current_section=QtCore.QString(u'Двутавр') self.flag_new=True #Загрузка таблиц self.type_element.currentIndexChanged.connect(self.load_input_table) #Загрузка сортаментов self.load_sect(self.list_type_element[0]) #Получение и передача списка сортамента в табицу: self.type_section.currentIndexChanged.connect(self.load_input_table) self.type_section.currentIndexChanged.connect(self.load_picture) self.load_picture() #Загрузка списка норм self.load_combobox(self.type_code, self.list_code) self.type_code.currentIndexChanged.connect(self.load_input_table) #Установка количества: self.number.setValue(1) self.number.valueChanged['int'].connect(self.change_column_table) self.change_column_table(1) #выбор рабочей папки self.button_folder.clicked.connect(self.show_dia_folder) #направляем на открытие: self.listWidget.itemDoubleClicked.connect(self.load_files) #связываем с расчетом self.solve_button.clicked.connect(self.solve) #в ворд self.word_button.clicked.connect(self.toWord) #закрыть сохранение и и ворд self.changed_input_data() self.input_table.currentItemChanged.connect(self.changed_input_data) #устанавливаем начальный путь self.load_list_files('c:\\') self.text_folder.clear() self.text_folder.insert('c:\\') #Сохраняем файл self.save_button.clicked.connect(self.toSave)
class MyWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("gui/solve_number_steel.ui", self) self.basa=BasaSort() #Загрузка и установка рассчитываемых типов self.list_type_element=[u'Ферма', u'Балка'] # self.list_type_element=[u'Ферма',u'Балка'] self.list_code=self.basa.list_code() self.load_combobox(self.type_element, self.list_type_element) self.type_element.currentIndexChanged["const QString&"].connect(self.load_sect) #Очистка таблицы вывода self.output_table.clear() self.output_table.setColumnCount(0) self.output_table.setRowCount(0) #установка флажков self.flag_current_code=QtCore.QString(self.list_code[0]) self.flag_current_count=1 self.flag_current_type_element=QtCore.QString(self.list_type_element[0]) self.flag_current_section=QtCore.QString(u'Двутавр') self.flag_new=True #Загрузка таблиц self.type_element.currentIndexChanged.connect(self.load_input_table) #Загрузка сортаментов self.load_sect(self.list_type_element[0]) #Получение и передача списка сортамента в табицу: self.type_section.currentIndexChanged.connect(self.load_input_table) self.type_section.currentIndexChanged.connect(self.load_picture) self.load_picture() #Загрузка списка норм self.load_combobox(self.type_code, self.list_code) self.type_code.currentIndexChanged.connect(self.load_input_table) #Установка количества: self.number.setValue(1) self.number.valueChanged['int'].connect(self.change_column_table) self.change_column_table(1) #выбор рабочей папки self.button_folder.clicked.connect(self.show_dia_folder) #направляем на открытие: self.listWidget.itemDoubleClicked.connect(self.load_files) #связываем с расчетом self.solve_button.clicked.connect(self.solve) #в ворд self.word_button.clicked.connect(self.toWord) #закрыть сохранение и и ворд self.changed_input_data() self.input_table.currentItemChanged.connect(self.changed_input_data) #устанавливаем начальный путь self.load_list_files('c:\\') self.text_folder.clear() self.text_folder.insert('c:\\') #Сохраняем файл self.save_button.clicked.connect(self.toSave) def changed_input_data(self): """закрывает схранение и ворд""" self.word_button.setEnabled(False) self.save_button.setEnabled(False) self.text_error.clear() self.output_table.clear() self.output_table.setRowCount(0) self.text_error.insert(u'Расчет не выполнен') def keyPressEvent(self, e): """обеспечивает возможность копирования, вставить""" copy_past(e, [window.input_table], [window.output_table], window) def toSave(self): '''сохраняем данные в файл, в указанную папку, имя==название 1-го элемента, если такой файл уже есть - спрашиваем про перезапись, после записи обновляем список файлов''' #1 - получаем путь и имя файла folder=self.text_folder.text() fil_name=unicode(self.input_table.item(0, 0).text()).rstrip()+'.con1' if folder[-2:]==":\\": fil=folder+fil_name else: fil=folder+str("\\")+fil_name #спрашиваем про перезапись файлов raw_list_files=os.listdir(folder) # print fil_name # print raw_list_files if fil_name in raw_list_files: # print 'tut' msgBox = QtGui.QMessageBox() msgBox.setWindowTitle(u'Перезапись файла') msgBox.setText(u'Файл существует, перезаписать?') msgBox.addButton(QtGui.QPushButton(u'Да'), QtGui.QMessageBox.YesRole) msgBox.addButton(QtGui.QPushButton(u'Нет'), QtGui.QMessageBox.NoRole) ret = msgBox.exec_() if ret==0: try: self.save(fil, [self.type_element, self.number, self.type_section, self.type_code, self.input_table]) except(IOError): self.text_error.clear() self.text_error.insert(u'Ошибка записи, файл возможно создан с ошибкой') else: try: self.save(fil, [self.type_element, self.number, self.type_section, self.type_code, self.input_table]) except(IOError): self.text_error.clear() self.text_error.insert(u'Ошибка записи, файл возможно создан с ошибкой') #обновляем список файлов self.load_list_files(folder) def save(self, fil, widgetList): '''сама запись и возврат 1 если ошибка, 0 - если все ок''' f= open(fil, 'w') for item in widgetList: if type(item)==QtGui.QComboBox: txt=str(item.currentIndex()).rstrip()+u'\n' f.write(txt) # print txt if type(item)==QtGui.QSpinBox: txt=str(item.value()).rstrip()+u'\n' f.write(txt) # print txt if type(item)==QtGui.QTableWidget: columnCount=item.columnCount() rowCount=item.rowCount() for i in range(columnCount): for j in range(rowCount): if item.cellWidget(j,i)==None: txt=str(item.item(j,i).text()).rstrip()+u'\n' f.write(txt) # print txt else: txt=str(item.cellWidget(j,i).currentIndex()).rstrip()+u'\n' f.write(txt) # print txt # if self.input_table.cellWidget(j,i)==None and self.input_table.item(j, i).text()=="" : # self.input_table.item(j,i).setText(u"0") f.close() def toWord(self): '''импорт в ворд''' # try: lst=[u'Расчет сечений',self.picture, self.type_element, self.type_section , self.type_code, self.input_table, self.output_table] # # , self.type_code, self.input_table] printToWord(lst) # except: # self.changed_input_data() # self.text_error.clear() # self.text_error.insert(u'Ошибка импорта в Word') # def load_files(self): """Обеспечивает загрузку новых файлов из сохранения. Сделано криво, только чтобы работало""" folder=self.text_folder.text() fil_name=self.listWidget.currentItem().text() fil=folder+str(u"\\")+fil_name # print fil f=open(fil, 'r') txt=int(f.readline()) # print txt self.type_element.setCurrentIndex(txt) txt=int(f.readline()) # print txt self.number.setValue(txt) txt=int(f.readline()) # print txt self.type_section.setCurrentIndex(txt) txt=int(f.readline()) # print txt self.type_code.setCurrentIndex(txt) columnCount=self.input_table.columnCount() rowCount=self.input_table.rowCount() for i in range(columnCount): for j in range(rowCount): if self.input_table.cellWidget(j,i)==None: txt=(f.readline()) # print txt self.input_table.item(j,i).setText(txt) else: txt=int(f.readline()) # print txt self.input_table.cellWidget(j,i).setCurrentIndex(txt) f.close() self.changed_input_data() def show_dia_folder(self): """отправляет список файлов, которые можно открыть в окно""" folder_name = QtGui.QFileDialog.getExistingDirectory(self, 'Open Folfer', self.text_folder.text()) if folder_name!='': self.text_folder.clear() self.text_folder.insert(folder_name) self.load_list_files(folder_name) def load_list_files(self, folder_name): if folder_name!='': raw_list_files=os.listdir(folder_name) list_files=[] for x in raw_list_files: if x[-5:]=='.con1': list_files.append(unicode(x)) self.listWidget.clear() self.listWidget.addItems(list_files) def load_combobox(self, widget, lst): widget.clear() widget.addItems(lst) def load_sect(self, type_section): lst=self.basa.output_list_section(type_section) self.load_combobox(self.type_section, lst) def load_input_table(self): self.changed_input_data() current_code=self.type_code.currentText() current_count=self.number.value() current_type_element=self.type_element.currentText() current_section=self.type_section.currentText() add_data2=[u'Название', u'Сортамент', u'№ Сечения', u'Сталь'] if self.flag_new==True or current_code!=self.flag_current_code or current_type_element!=self.flag_current_type_element or current_section!=self.flag_current_section: self.input_table.clear() self.input_table.setRowCount(0) self.input_table.setColumnCount(current_count+1) self.input_table.setColumnCount(current_count) self.flag_new=False self.flag_current_code=current_code self.flag_current_type_element= current_type_element self.flag_current_section=current_section add_data=self.basa.add_data_sostav(current_section) if add_data!=[]: add_data=add_data[0] self.data_lst=self.basa.data_solve(current_type_element) # print self.data_lst data=[] for i in self.data_lst: data.append(i[0]) # print data # data=self.basa.data_solve(current_type_element) # data=self.snipn.solve_data(self.flag_current_type_element)# нет пока таког lst=add_data2+add_data+data self.input_table.clear() self.input_table.setRowCount(len(lst)) self.input_table.setVerticalHeaderLabels(lst) self.combobox_sort=[] self.combobox_num_sect=[] self.combobox_steel=[] self.combobox_buckl_typ=[] self.combobox_buckl_fix=[] self.combobox_buckl_load=[] self.combobox_buckl_place=[] for i in range(current_count): self.load_table_combobox(i) if current_count>self.flag_current_count: for i in range(self.flag_current_count, current_count): self.load_table_combobox(i) self.flag_current_count=current_count if current_count<self.flag_current_count: for i in range(self.flag_current_count,current_count,-1): self.combobox_sort.pop(i-1) self.combobox_num_sect.pop(i-1) self.combobox_steel.pop(i-1) if current_type_element==u'Балка': self.combobox_buckl_typ.pop(i-1) self.combobox_buckl_fix.pop(i-1) self.combobox_buckl_load.pop(i-1) self.combobox_buckl_place.pop(i-1) self.flag_current_count=current_count #обнуление данных for i in range(current_count): for j in range(self.input_table.rowCount()): # print self.input_table.cellWidget(j,i) if self.input_table.cellWidget(j,i)==None: # print i, j self.input_table.setItem(j, i, QtGui.QTableWidgetItem("")) class load_section_number(): def __init__(self, i, parent): self.i=i self.parent=parent def __call__(self): i=self.i lst_num_sect=self.parent.basa.output_list_sect_num(self.parent.combobox_sort[i].currentText(), self.parent.type_section.currentText()) self.parent.load_combobox(self.parent.combobox_num_sect[i], lst_num_sect) def start(self): self.__call__() def load_table_combobox(self, i): #сортаменты self.combobox_sort.append(QtGui.QComboBox()) lst_sort=self.basa.output_list_sortament(self.type_section.currentText()) self.load_combobox(self.combobox_sort[i], lst_sort) self.input_table.setCellWidget(1,i,self.combobox_sort[i]) self.combobox_sort[i].currentIndexChanged.connect(self.changed_input_data) # сечения self.combobox_num_sect.append(QtGui.QComboBox()) load=self.load_section_number(i, self) load.start() self.input_table.setCellWidget(2,i,self.combobox_num_sect[i]) self.combobox_sort[i].currentIndexChanged.connect(self.load_section_number(i, self)) self.combobox_num_sect[i].currentIndexChanged.connect(self.changed_input_data) # сталь self.combobox_steel.append(QtGui.QComboBox()) code=self.type_code.currentText() steel=list_steel(code=code,typ_steel='prokat') lst_steel=steel.get_list() self.load_combobox(self.combobox_steel[i], lst_steel) self.input_table.setCellWidget(3,i,self.combobox_steel[i]) self.combobox_steel[i].currentIndexChanged.connect(self.changed_input_data) #Только для балок if self.type_element.currentText()==u'Балка': self.combobox_buckl_typ.append(QtGui.QComboBox()) self.combobox_buckl_fix.append(QtGui.QComboBox()) self.combobox_buckl_load.append(QtGui.QComboBox()) self.combobox_buckl_place.append(QtGui.QComboBox()) lst1=self.data_lst[4][1] lst2=self.data_lst[5][1] lst3=self.data_lst[6][1] lst4=self.data_lst[7][1] self.load_combobox(self.combobox_buckl_typ[i], lst1) self.input_table.setCellWidget(8,i,self.combobox_buckl_typ[i]) self.combobox_buckl_typ[i].currentIndexChanged.connect(self.changed_input_data) self.load_combobox(self.combobox_buckl_fix[i], lst2) self.input_table.setCellWidget(9,i,self.combobox_buckl_fix[i]) self.combobox_buckl_fix[i].currentIndexChanged.connect(self.changed_input_data) self.load_combobox(self.combobox_buckl_load[i], lst3) self.input_table.setCellWidget(10,i,self.combobox_buckl_load[i]) self.combobox_buckl_load[i].currentIndexChanged.connect(self.changed_input_data) self.load_combobox(self.combobox_buckl_place[i], lst4) self.input_table.setCellWidget(11,i,self.combobox_buckl_place[i]) self.combobox_buckl_place[i].currentIndexChanged.connect(self.changed_input_data) def change_column_table(self, i): self.input_table.setColumnCount(i) self.load_input_table() def load_picture(self): lab=self.type_section.currentText() if lab!="": # print lab pict=self.basa.pict(lab) self.picture.setPixmap(QtGui.QPixmap(pict)) def solve(self): #сбор исходных данных class error_data():pass class error_steel():pass current_code=self.type_code.currentText() current_count=self.number.value() current_type_element=self.type_element.currentText() current_section=self.type_section.currentText() add_data=self.basa.add_data_sostav(current_section) if add_data!=[]: sdv_sostav=len(add_data[0]) else: sdv_sostav=0 add_data=[[],[1,100]] sdv=sdv_sostav+4 lst_gen=[] self.data_lst=self.basa.data_solve(current_type_element) try: for i in range(current_count): lst=[] for j in range(self.input_table.rowCount()): if self.input_table.cellWidget(j,i)==None and self.input_table.item(j, i).text()=="" : self.input_table.item(j,i).setText(u"0") if self.input_table.cellWidget(j,i)==None and ("," in self.input_table.item(j, i).text()): text=self.input_table.item(j, i).text() text=text.replace(',','.') self.input_table.item(j, i).setText(text) if self.input_table.cellWidget(j,i)==None: if j==0: lst.append(self.input_table.item(j,i).text()) else: num=self.input_table.item(j,i).text() num=float(num) # print j # print self.data_lst[j-sdv][1][0], self.data_lst[j-sdv][1][0], sdv, sdv_sostav, num # print add_data[1][0], add_data[1][1] #проверка данных балок/ферм if j>=sdv and self.data_lst[j-sdv][1][0]<=num and self.data_lst[j-sdv][1][1]>=num: lst.append(num) elif j<sdv-sdv_sostav: lst.append(num) elif j>=sdv-sdv_sostav and j<sdv and num>=add_data[1][0] and num<=add_data[1][1]: lst.append(num) else: raise error_data() else: if j<4: wid=self.input_table.cellWidget(j,i) lst.append(wid.currentText()) else: wid=self.input_table.cellWidget(j,i) lst.append(wid.currentIndex()+1) current_gost=lst[1] current_num_sect=lst[2] current_steel=lst[3] inp=lst[4:] # print current_code, current_type_element, current_section, current_gost, current_num_sect, current_steel, inp out=self.basa.output_simple(current_code, current_type_element, current_section, current_gost, current_num_sect, current_steel, inp) if out==0: raise error_steel() lst_gen.append(out) #ставим данные self.output_table.setColumnCount(current_count) self.output_table.setRowCount(len(lst_gen[0])) vert_head=[] for i in lst_gen[0]: vert_head.append(i[1]) self.output_table.setVerticalHeaderLabels(vert_head) for i in range(current_count): for j in range(self.output_table.rowCount()): self.output_table.setItem(j, i, QtGui.QTableWidgetItem("1")) if type(lst_gen[i][j][0])!=type(''): txt="%.2f"%(lst_gen[i][j][0]) else: txt=lst_gen[i][j][0] self.output_table.item(j,i).setText(txt) self.output_table.item(j,i).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) except ZeroDivisionError : self.changed_input_data() self.text_error.clear() self.text_error.insert(u'Ошибка') except error_data, ValueError: self.changed_input_data() self.text_error.clear() self.text_error.insert(u'Ошибка исходных данных') except error_steel: self.changed_input_data() self.text_error.clear() self.text_error.insert(u'Толщина элемента выходит за границы применимости стали')
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("gui/solve_steel_sectionv2.ui", self) self.basa=BasaSort() #загружаем код и связываем его изменение self.loadCode() self.boxCode.currentIndexChanged.connect(self.changeCode) #загружаем элементы и связываем его изменение self.loadElement() self.boxElement.currentIndexChanged.connect(self.changeElement) #загружаем тип расчета и связываем его изменение self.loadTypeSolve() self.boxTypeSolve.currentIndexChanged.connect(self.changeTypeSolve) #загружаем тип сечения и связываем его изменение self.loadTypeSection() self.boxTypeSection.currentIndexChanged.connect(self.changeTypeSection) #загружаем тип расчета и связываем его изменение self.loadFormSection() self.boxFormSection.currentIndexChanged.connect(self.changeFormSection) #загружаем сортаменты и связываем его изменение self.loadSortament() self.boxSortament.currentIndexChanged.connect(self.changeSortament) #загружаем элементы и связываем его изменение self.loadNumberSection() self.boxNumberSection.currentIndexChanged.connect(self.changeNumberSection) #загружаем сталь и связываем его изменение self.loadSteel() self.boxSteel.currentIndexChanged.connect(self.changeSteel) #загружаем таблицу и связываем его изменение self.loadTableInput() self.tableInput.currentItemChanged.connect(self.changeTableInput) #загружаем таблицу усилий и связываем его изменение self.loadTableLoad() self.tableLoad.currentItemChanged.connect(self.changeTableLoad) self.tableLoad.itemChanged.connect(self.changeTableLoad) #загружаем рисунок self.loadPicture() #на всякий случай сбрасываем выходные данные self.changeInputData() #связываем счетчик с дейтсвиями self.boxCountLoad.valueChanged.connect(self.changeCountTableLoad) self.boxCountLoad.setValue(1) self.changeCountTableLoad() self.buttonSolve.clicked.connect(self.solve) # ставим тип сечения -фермаЖ self.boxElement.setCurrentIndex(0) self.loadTableInput() #Сохранение/открытие файлов #выбор рабочей папки self.buttonFolder.clicked.connect(self.show_dia_folder) #направляем на открытие: self.listFiles.itemDoubleClicked.connect(self.loadFiles) #устанавливаем начальный путь self.load_list_files('c:\\') self.textFolder.clear() self.textFolder.insert('c:\\') #Сохраняем файл self.buttonSave.clicked.connect(self.toSave) #в ворд self.buttonWord.clicked.connect(self.toWord)
class MyWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) uic.loadUi("gui/solve_steel_sectionv2.ui", self) self.basa=BasaSort() #загружаем код и связываем его изменение self.loadCode() self.boxCode.currentIndexChanged.connect(self.changeCode) #загружаем элементы и связываем его изменение self.loadElement() self.boxElement.currentIndexChanged.connect(self.changeElement) #загружаем тип расчета и связываем его изменение self.loadTypeSolve() self.boxTypeSolve.currentIndexChanged.connect(self.changeTypeSolve) #загружаем тип сечения и связываем его изменение self.loadTypeSection() self.boxTypeSection.currentIndexChanged.connect(self.changeTypeSection) #загружаем тип расчета и связываем его изменение self.loadFormSection() self.boxFormSection.currentIndexChanged.connect(self.changeFormSection) #загружаем сортаменты и связываем его изменение self.loadSortament() self.boxSortament.currentIndexChanged.connect(self.changeSortament) #загружаем элементы и связываем его изменение self.loadNumberSection() self.boxNumberSection.currentIndexChanged.connect(self.changeNumberSection) #загружаем сталь и связываем его изменение self.loadSteel() self.boxSteel.currentIndexChanged.connect(self.changeSteel) #загружаем таблицу и связываем его изменение self.loadTableInput() self.tableInput.currentItemChanged.connect(self.changeTableInput) #загружаем таблицу усилий и связываем его изменение self.loadTableLoad() self.tableLoad.currentItemChanged.connect(self.changeTableLoad) self.tableLoad.itemChanged.connect(self.changeTableLoad) #загружаем рисунок self.loadPicture() #на всякий случай сбрасываем выходные данные self.changeInputData() #связываем счетчик с дейтсвиями self.boxCountLoad.valueChanged.connect(self.changeCountTableLoad) self.boxCountLoad.setValue(1) self.changeCountTableLoad() self.buttonSolve.clicked.connect(self.solve) # ставим тип сечения -фермаЖ self.boxElement.setCurrentIndex(0) self.loadTableInput() #Сохранение/открытие файлов #выбор рабочей папки self.buttonFolder.clicked.connect(self.show_dia_folder) #направляем на открытие: self.listFiles.itemDoubleClicked.connect(self.loadFiles) #устанавливаем начальный путь self.load_list_files('c:\\') self.textFolder.clear() self.textFolder.insert('c:\\') #Сохраняем файл self.buttonSave.clicked.connect(self.toSave) #в ворд self.buttonWord.clicked.connect(self.toWord) def solve(self): """Расчет сам: выход в два списка - один в таблицу решения, один в общий вывод""" #собираем все данные code=self.boxCode.currentText() element=self.boxElement.currentText() typeSolve=self.boxTypeSolve.currentText() typeSection=self.boxTypeSection.currentText() formSection=self.boxFormSection.currentText() sortament=self.boxSortament.currentText() numberSection=self.boxNumberSection.currentText() steel=self.boxSteel.currentText() addData=self.basa.add_data_sostav(formSection) if addData!=[]: lenAddData=len(addData[0]) else: lenAddData=0 # print formSection # print addData #простые данные собрали, теперь собираем данные из таблиц и обрабатываем, если что - экстеншин class errorData():pass class errorSteel():pass try: #сначала собираем данные для addData lstAddData=[] if lenAddData>0: for i in range(lenAddData): text=self.tableInput.item(i,0).text() if "," in text: text=text.replace(',','.') text=float(text) self.tableInput.item(i,0).setText(str(text)) if text>=addData[1][0] and text<=addData[1][1]: lstAddData.append(text) else: raise(errorData) #собираем остальные данные inputData=self.basa.lstInputDataPP(code, element) lenInputData=len(inputData) lstInputData=[] for i in range(lenInputData): j=i+lenAddData #сначала widget # print self.tableInput.cellWidget(j,0) if self.tableInput.cellWidget(j,0)!=None: wid=self.tableInput.cellWidget(j,0) lstInputData.append(wid.currentIndex()+1) else: # print j, i, lenAddData #потом остальное text=self.tableInput.item(j,0).text() if "," in text: text=text.replace(',','.') text=float(text) self.tableInput.item(j,0).setText(str(text)) # print text if text>=inputData[i][1][0] and text<=inputData[i][1][1]: lstInputData.append(text) else: raise(errorData) # print lstInputData, lstAddData # '''собираем нагрузки''' lstForce=[] countColumnLoad=self.tableLoad.columnCount() countRowLoad=self.tableLoad.rowCount() for i in range(countRowLoad): lstRow=[] for j in range(countColumnLoad): if self.tableLoad.item(i,j)==None or self.tableLoad.item(i,j).text()=='': self.tableLoad.setItem(i, j, QtGui.QTableWidgetItem("")) self.tableLoad.item(i,j).setText('0') text=self.tableLoad.item(i,j).text() if "," in text: text=text.replace(',','.') text=float(text) self.tableLoad.item(i,j).setText(str(text)) lstRow.append(text) lstForce.append(lstRow) # lstIn=code, element, typeSolve,typeSection,formSection,sortament,numberSection,steel,lstAddData, lstInputData, lstForce # print lstIn out=self.basa.solvePP(code, element, typeSolve,typeSection,formSection,sortament,numberSection,steel,lstAddData, lstInputData, lstForce) # print out if out==0: raise errorSteel #заполняем таблицу усилий self.tabOutputData.setEnabled(True) numColumn=len(out[1][0]) numRow=len(out[1])-1 self.tableOutLoad.setColumnCount(numColumn) self.tableOutLoad.setRowCount(numRow) # print out[1] self.tableOutLoad.setHorizontalHeaderLabels(out[1][0]) for i in range(numRow): for j in range(numColumn): if type(out[1][i+1][j])==type(1.0) or type(out[1][i+1][j])==type(1): txt="%.2f"%(out[1][i+1][j]) else: txt=out[1][i+1][j] # print i, j self.tableOutLoad.setItem(i, j, QtGui.QTableWidgetItem("")) self.tableOutLoad.item(i,j).setText(txt) self.tableOutLoad.item(i,j).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) #заполняем таблицу K исп self.tabGeneralOutputData.setEnabled(True) self.tabWidget.setCurrentIndex(3) numRow=len(out[2]) verticalHeader=[] for i in out[2]: verticalHeader.append(i[0]) # print verticalHeader self.tableOutK.setRowCount(numRow) self.tableOutK.setColumnCount(1) self.tableOutK.setVerticalHeaderLabels(verticalHeader) self.tableOutK.setHorizontalHeaderLabels(['']) # print out[2] j=-1 for i in out[2]: j+=1 # print i if type(i[1])==type(1.0): txt="%.2f"%(i[1]) elif type(i[1])==type(1): txt="%.0f"%(i[1]) else: txt=i[1] # print i, j self.tableOutK.setItem(j, 0, QtGui.QTableWidgetItem("")) self.tableOutK.item(j,0).setText(txt) self.tableOutK.item(j,0).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) #Ставим - проходит/не проходит сечение if out[0][0]>1: self.labelComment.setText(u'Требования норм НЕ обеспечены') self.labelComment.setStyleSheet("background: red") else: self.labelComment.setText(u'Требования норм обеспечены') self.labelComment.setStyleSheet("background: green") #заполняем последнюю таблицу numRow=len(out[3]) verticalHeader=[] for i in out[3]: verticalHeader.append(i[1]) # print verticalHeader self.tableOutGeneral.setRowCount(numRow) self.tableOutGeneral.setColumnCount(1) self.tableOutGeneral.setVerticalHeaderLabels(verticalHeader) self.tableOutGeneral.setHorizontalHeaderLabels(['']) # print out[2] j=-1 for i in out[3]: j+=1 # print i if type(i[0])==type(1.0): txt="%.2f"%(i[0]) elif type(i[0])==type(1): txt="%.0f"%(i[0]) else: txt=i[0] # print i, j self.tableOutGeneral.setItem(j, 0, QtGui.QTableWidgetItem("")) self.tableOutGeneral.item(j,0).setText(txt) self.tableOutGeneral.item(j,0).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) except errorData: self.labelComment.setText(u'Выход за границы допустимых значений') self.labelComment.setStyleSheet("background: yellow") except ValueError: self.labelComment.setText(u'Недопустимые исходные данные') self.labelComment.setStyleSheet("background: yellow") except errorSteel: self.labelComment.setText(u'Не найдены значения стали для профиля') self.labelComment.setStyleSheet("background: yellow") else: self.buttonWord.setEnabled(True) self.buttonSave.setEnabled(True) def keyPressEvent(self, e): """обеспечивает возможность копирования, вставить""" copy_past(e, [window.tableInput, window.tableLoad], [window.tableOutLoad, window.tableOutK, window.tableOutGeneral], window) def loadComboBox(self, widget, lst): '''load ComboBox''' widget.clear() widget.addItems(lst) def changeInputData(self): '''Делать, когда изменились данные''' self.tabOutputData.setEnabled(False) self.tableOutLoad.clear() self.tabGeneralOutputData.setEnabled(False) self.labelComment.setText(u'Исходные данные изменились') self.labelComment.setStyleSheet("background: white") self.buttonWord.setEnabled(False) self.buttonSave.setEnabled(False) def loadCode(self): '''загружаем и ставим список норм''' lst=self.basa.list_code() self.loadComboBox(self.boxCode, lst) def changeCode(self): '''Делаем когда изменились нормы, 1. Меняем список стали 2. Делаем стандартные действия''' self.loadSteel() self.changeInputData() def loadElement(self): '''загружаем и ставим список элементов''' tempLst=self.basa.output_list_elements() lst=[] for i in tempLst: lst.append(i[0]) # print lst self.loadComboBox(self.boxElement, lst) def changeElement(self): '''делаем когда изменился тип элемента: 1. меняем список форму сечения 2. меняем таблицу входных данных 3. меняем таблицу усилий 4. делаем стандартные дейтсивя''' self.loadFormSection() self.loadTableInput() self.loadTableLoad() self.changeInputData() def loadTypeSolve(self): '''загружаем и ставим список расчетов - подбор и проверка''' # lst=[u'Проверка', u'Подбор'] lst=[u'Проверка'] self.loadComboBox(self.boxTypeSolve, lst) def changeTypeSolve(self): '''делаем когда изменился тип расчета: 1. если подбор - заблокировать выбор номера сечения 2. делаем стандартные дейтсивя''' flag=self.boxTypeSolve.currentIndex() if flag==0: self.boxNumberSection.setEnabled(True) self.loadNumberSection() elif flag==1: self.boxNumberSection.setEnabled(False) self.boxNumberSection.clear() self.changeInputData() def loadTypeSection(self): '''загружаем и ставим тип сечения''' lst=[u'Прокат'] self.loadComboBox(self.boxTypeSection, lst) def changeTypeSection(self): 'Пока ничего не делаем' pass def loadFormSection(self): '''загружаем и ставим форму сечения''' element=self.boxElement.currentText() lst=self.basa.output_list_section(element) self.loadComboBox(self.boxFormSection, lst) def changeFormSection(self): '''делаем когда изменился тип расчета: 1. загрузить список сортаментов 2. меняем рисунок 3. делаем стандартные дейтсивя''' self.loadSortament() self.loadPicture() self.changeInputData() self.loadTableInput() def loadSortament(self): '''загружаем и ставим список сортаментов''' formSection=self.boxFormSection.currentText() lstSortament=self.basa.output_list_sortament(formSection) self.loadComboBox(self.boxSortament, lstSortament) def changeSortament(self): '''делаем когда изменился тип расчета: 1. загрузить список сортаментов 2. делаем стандартные дейтсивя''' self.loadNumberSection() self.changeInputData() def loadNumberSection(self): '''загружаем и ставим список профилей, если элемент активен''' if self.boxNumberSection.isEnabled(): formSection=self.boxFormSection.currentText() sortament=self.boxSortament.currentText() lstNumberSection=self.basa.output_list_sect_num(sortament, formSection) self.loadComboBox(self.boxNumberSection, lstNumberSection) def changeNumberSection(self): '''делаем когда изменился номер профиоя: 1. делаем стандартные дейтсивя''' self.changeInputData() def loadSteel(self): '''загружаем и ставим список стали''' code=self.boxCode.currentText() lstSteel=list_steel(code=code,typ_steel='prokat').get_list() # print lstSteel self.loadComboBox(self.boxSteel, lstSteel) def changeSteel(self): '''делаем когда изменилась сталь: 1. делаем стандартные дейтсивя''' self.changeInputData() def loadTableInput(self): '''загружаем данные в таблицу''' self.tableInput.clear() code=self.boxCode.currentText() element=self.boxElement.currentText() lst=self.basa.lstInputDataPP(code, element) formSection=self.boxFormSection.currentText() addDataForm=self.basa.add_data_sostav(formSection) # print lst # ln=len(lst) if addDataForm!=[]: name=addDataForm[0][:] else: name=[] i=len(name)-1 for num in lst: i+=1 if type(num[1][0])==type(0.10) or type(num[1][0])==type(1): self.tableInput.setItem(i, 0, QtGui.QTableWidgetItem("")) else: # print num[1] userWidget=QtGui.QComboBox() self.loadComboBox(userWidget, num[1]) self.tableInput.setCellWidget(i,0,userWidget) name.append(num[0]) self.tableInput.setRowCount(len(name)) self.tableInput.setVerticalHeaderLabels(name) def changeTableInput(self): '''делаем когда изменилась таблица: 1. делаем стандартные дейтсивя''' self.changeInputData() def loadTableLoad(self): '''загружаем таблицу усилий ''' self.tableLoad.clear() code=self.boxCode.currentText() element=self.boxElement.currentText() lst=self.basa.lstLoadDataPP(code, element) self.tableLoad.setColumnCount(len(lst)) self.tableLoad.setHorizontalHeaderLabels(lst) def changeTableLoad(self): '''делаем когда изменилась таблица: 1. делаем стандартные дейтсивя''' self.changeInputData() def loadPicture(self): '''загружаем рисунок''' lab=self.boxFormSection.currentText() if lab!="": # print lab pict=self.basa.pict(lab) self.labelPicture.setPixmap(QtGui.QPixmap(pict)) def changeCountTableLoad(self): '''изменяем кол-во строк при изенении счетчика''' i=self.boxCountLoad.value() self.tableLoad.setRowCount(i) self.changeInputData() def show_dia_folder(self): """отправляет список файлов, которые можно открыть в окно""" folder_name = QtGui.QFileDialog.getExistingDirectory(self, 'Open Folfer', self.textFolder.text()) if folder_name!='': self.textFolder.clear() self.textFolder.insert(folder_name) self.load_list_files(folder_name) def load_list_files(self, folder_name): if folder_name!='': raw_list_files=os.listdir(folder_name) list_files=[] for x in raw_list_files: if x[-5:]=='.con2': list_files.append(unicode(x)) self.listFiles.clear() self.listFiles.addItems(list_files) def loadFiles(self): folder=self.textFolder.text() fil_name=self.listFiles.currentItem().text() fil=folder+str(u"\\")+fil_name # try: lst=[self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, self.boxNumberSection, self.boxSteel,self.tableInput,self.boxCountLoad, self.tableLoad, self.tableOutLoad, self.tableOutK, self.tableOutGeneral] load2form(fil, lst) self.changeInputData() # except: # self.labelComment.clear() # self.labelComment.setText(u'Ошибка чтения') # self.labelComment.setStyleSheet("background: yellow") self.textName.setText(fil_name[:-5]) def toSave(self): lst=[self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, self.boxNumberSection, self.boxSteel,self.tableInput,self.boxCountLoad, self.tableLoad, self.tableOutLoad, self.tableOutK, self.tableOutGeneral] '''сохраняем данные в файл, в указанную папку, имя==название 1-го элемента, если такой файл уже есть - спрашиваем про перезапись, после записи обновляем список файлов''' #1 - получаем путь и имя файла folder=self.textFolder.text() if self.textName.text()!='': fil_name=unicode(self.textName.text()).rstrip()+'.con2' else: fil_name=u'1.con2' self.textName.setText('1') if folder[-2:]==":\\": fil=folder+fil_name else: fil=folder+str("\\")+fil_name #спрашиваем про перезапись файлов raw_list_files=os.listdir(folder) # print fil_name # print raw_list_files if fil_name in raw_list_files: # print 'tut' msgBox = QtGui.QMessageBox() msgBox.setWindowTitle(u'Перезапись файла') msgBox.setText(u'Файл существует, перезаписать?') msgBox.addButton(QtGui.QPushButton(u'Да'), QtGui.QMessageBox.YesRole) msgBox.addButton(QtGui.QPushButton(u'Нет'), QtGui.QMessageBox.NoRole) ret = msgBox.exec_() if ret==0: try: save2file(fil, lst) except(IOError): self.labelComment.clear() self.labelComment.insert(u'Ошибка записи, файл возможно создан с ошибкой') self.labelComment.setStyleSheet("background: yellow") else: try: save2file(fil, lst) except(IOError): self.labelComment.clear() self.labelComment.insert(u'Ошибка записи, файл возможно создан с ошибкой') self.labelComment.setStyleSheet("background: yellow") #обновляем список файлов self.load_list_files(folder) def toWord(self): '''импорт в ворд''' if self.boxCountLoad.value()<100 and self.boxElement.currentIndex()!=2: lst=['Расчет сечения',self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, self.boxNumberSection, self.boxSteel,self.tableInput, self.tableLoad, self.tableOutLoad, self.tableOutK, self.tableOutGeneral] elif self.boxCountLoad.value()<100 and self.boxElement.currentIndex()!=2: lst=['Расчет сечения',self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, self.boxNumberSection, self.boxSteel,self.tableInput, self.tableLoad, self.tableOutK, self.tableOutGeneral] else: lst=['Расчет сечения',self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, self.boxNumberSection, self.boxSteel,self.tableInput, self.tableOutK, self.tableOutGeneral] # lst=[u'Расчет сечения',self.boxCode, self.boxElement, self.boxTypeSolve, self.boxTypeSection,self.boxFormSection, self.boxSortament, # self.boxNumberSection, self.boxSteel, self.labelPicture, self.tableInput, self.tableLoad, self.tableOutLoad, self.tableOutK, self.tableOutGeneral] # printToWord(lst)
def toword(): # try: basa=BasaSort() lab=window.listWidget.currentItem().text() wordapp = win32com.client.Dispatch("Word.Application") wordapp.Visible = 1 worddoc = wordapp.Documents.Add() worddoc.PageSetup.Orientation = 1 worddoc.PageSetup.BookFoldPrinting = 1 worddoc.ActiveWindow.Selection.Font.Size = 12 worddoc.ActiveWindow.Selection.Font.Name="Times New Roman" worddoc.ActiveWindow.Selection.BoldRun() worddoc.ActiveWindow.Selection.TypeText(u"Расчет сечения") worddoc.ActiveWindow.Selection.TypeParagraph() worddoc.ActiveWindow.Selection.BoldRun() worddoc.ActiveWindow.Selection.TypeText(u"Сечение: "+unicode(lab)) worddoc.ActiveWindow.Selection.TypeParagraph() temp=os.environ['TEMP'] path=basa.pict(lab) shutil.copy2(path,temp) dir_pict=str(temp+'\\'+basa.pict(lab)[17:]) worddoc.ActiveWindow.Selection.InlineShapes.AddPicture(dir_pict) os.remove(dir_pict) # for i in sys.path: # if 'SortamentPicture' in os.listdir(i): # home=i # break # dir_pict=str(home+'\\'+basa.pict(lab)) # worddoc.ActiveWindow.Selection.InlineShapes.AddPicture(dir_pict) worddoc.ActiveWindow.Selection.TypeParagraph() worddoc.ActiveWindow.Selection.TypeText(u"Исходные характеристики:") worddoc.ActiveWindow.Selection.TypeParagraph() location = worddoc.ActiveWindow.Selection.Range table = location.Tables.Add (location, 2, len(basa.input_data(lab))) table.ApplyStyleHeadingRows = 1 table.AutoFormat(16) x=1 for i in basa.input_data(lab): table.Cell(1,x).Range.InsertAfter(i) table.Cell(2,x).Range.InsertAfter(window.inputtable.item(0, x-1).text()) x=x+1 worddoc.ActiveWindow.Selection.MoveDown() worddoc.ActiveWindow.Selection.MoveDown() worddoc.ActiveWindow.Selection.TypeParagraph() worddoc.ActiveWindow.Selection.TypeText(u"Расчетные характеристики:") worddoc.ActiveWindow.Selection.TypeParagraph() worddoc.ActiveWindow.Selection.Font.Size = 10 location2 = worddoc.ActiveWindow.Selection.Range output_table=window.outputtable lenght_table=output_table.columnCount() count_table=(lenght_table-0.5)//7+1 table = location2.Tables.Add (location2, 2*count_table, 7) table.ApplyStyleHeadingRows = 1 table.AutoFormat(16) for i in range(lenght_table): j=(i)//7+1 z=(i+1)-(j-1)*7 # print j, z table.Cell((j-1)*2+1,z).Range.InsertAfter(unicode(output_table.horizontalHeaderItem(i).text())) table.Cell((j-1)*2+2,z).Range.InsertAfter(unicode(output_table.item(0, i).text())) del wordapp
for i in output_table: x=x+1 y=-1 for j in i: y=y+1 item = QtGui.QTableWidgetItem(unicode(j)) frame.setItem(x,y,item) frame.item(x,y).setFlags(QtCore.Qt.ItemFlags(1+2+4+8+6+12+64)) # for i in range(0,0): # frame.setColumnWidth(i, 40) for i in range(0,len_input_data+1): frame.setColumnWidth(i, 35) for i in range(len_input_data+1,len(output_table[0])+1): frame.setColumnWidth(i, 55) frame.setColumnWidth(0, 65) return 0 if __name__=="__main__": import sys basa=BasaSort() sort_list=basa.list4sortament() app=QtGui.QApplication(sys.argv) window=MyWindow() window.show() sys.exit(app.exec_())