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())
Beispiel #2
0
 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)
Beispiel #3
0
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(""))
Beispiel #4
0
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)
Beispiel #9
0
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_())