I have made a UI in QtCreator 5. Then, I converted UI-file "Odor.ui" into "ui-main.py". Then I used Anaconda framework to write a computational part in Upiter Notebook. When, I compile this code
import osimport sysimport pandas as pdimport numpyimport scipy.statsimport xlsxwriterimport refrom PyQt5.QtWidgets import QApplication, QMainWindow, qApp, QWidget, QInputDialog, QLineEdit, QFileDialog, QMessageBox, QTableWidgetItem, QHeaderViewfrom PyQt5.QtCore import Qt, QEvent, QObjectfrom PyQt5.QtCore import pyqtSlotfrom PyQt5 import QtGuifrom ui_main import Ui_MainWindowfrom os import walkfrom os.path import expanduser as ospathimport globfrom time import gmtime, strftimeclass MyMainWindow(QMainWindow, Ui_MainWindow):def __init__(self, parent=None): super(MyMainWindow, self).__init__(parent) qApp.installEventFilter(self) self.setupUi(self) self.dataChooseBtn.clicked.connect(self.selectFile) self.saveSample_btn.clicked.connect(self.saveSample) self.data_processing.clicked.connect(self.process) self.string_processing.clicked.connect(self.processString) self.saveSampleString.clicked.connect(self.saveSampleStr) self.refreshSample() self.refreshSamples.clicked.connect(self.refreshSample) self.refreshSample_2() self.refreshSamples_2.clicked.connect(self.refreshSample_2) self.show()def eventFilter(self, obj, event): if event.type() == QEvent.KeyPress: if event.key() == Qt.Key_Escape: self.close() return super(MyMainWindow, self).eventFilter(obj, event)@pyqtSlot()def accept(self): textboxValue = self.paramInput_field_2.text() QMessageBox.information(self, 'Message', "Значенияпараметрическогостолбца: "+ textboxValue, QMessageBox.Ok, QMessageBox.Ok)def selectFile(self): self.fileName = None options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileName, _ = QFileDialog.getOpenFileName(self,"Выберитестандартизированнуювыборку", "./Unprocessed samples","All Files (*);;Python Files (*.py)", options=options) if fileName: self.fileName = fileNamedef process(self): sample_param = pd.read_excel(self.fileName, header = None, sheetname = 1) param = sample_param[0].tolist() sample = pd.read_excel(self.fileName, sheetname = 0) list_of_index = [] for i in range(len(sample.columns)): sample2 = sample.iloc[:, lambda sample: [i]] sample2 = sample2.columns[0] list_of_index.append(sample2) list_of_index fulllist = [] for i in list_of_index: sample3 = sample[i].tolist() fulllist.append(sample3) fulllist_percent = [] column_percent = [] len(fulllist) for i in range(len(fulllist)): for j in range(len(fulllist[i])): percent_rank = scipy.stats.percentileofscore(fulllist[i], fulllist[i][j]) column_percent.append(percent_rank) fulllist_percent.append(column_percent) column_percent = [] fulllist_rank = [] for i in range(len(fulllist)): rank = len(fulllist[i]) - scipy.stats.rankdata(fulllist[i]) + 1 fulllist_rank.append(rank) param_rank = scipy.stats.rankdata(param).astype(int) column_corr = [] for i in range(len(fulllist)): correlation = scipy.stats.spearmanr(param_rank[::-1], fulllist_rank[i]) column_corr.append(correlation[0]) fulllist_click = [] for j in range (len(fulllist_percent)): middle = [] if column_corr[j] > 0: for i in range(len(fulllist_percent[j])): solve = column_corr[j] * fulllist_percent[j][i] middle.append(solve) else: for i in range (len(fulllist_percent[j])): solve = abs(column_corr[j]) * (100 - fulllist_percent[j][i]) middle.append(solve) fulllist_click.append(middle) list_of_rowsumm = [] rowsumm = 0 fulllist_clickT = numpy.asarray(fulllist_click).T.tolist() for i in range(len(fulllist_clickT)): rowsumm = sum(fulllist_clickT[i]) list_of_rowsumm.append(rowsumm) percent_rowsumm = [] for i in list_of_rowsumm: x = scipy.stats.percentileofscore(list_of_rowsumm, i) percent_rowsumm.append(x) validity = scipy.stats.pearsonr(list_of_rowsumm, param) validity = validity[0] additional_info = [] additional_info.append(list_of_rowsumm) additional_info.append(percent_rowsumm) additional_info.append(param) self.fulllist = fulllist self.fulllist_percent = fulllist_percent self.fulllist_click = fulllist_click self.additional_info = additional_info self.validity = validity return self.fulllist, self.fulllist_percent, self.fulllist_click, self.additional_info, self.validitydef saveSample(self): options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileNameSave, _ = QFileDialog.getSaveFileName(self,"Сохранитьданныевыборки","./Samples","Excel files (*.xlsx)", options=options) workbook = xlsxwriter.Workbook(fileNameSave +' ['+ str(round(self.validity, 3)) +', '+ str(len(self.fulllist)) +', '+ str(len(self.fulllist[0])) +']'+".xlsx") worksheet1 = workbook.add_worksheet() worksheet2 = workbook.add_worksheet() worksheet3 = workbook.add_worksheet() worksheet4 = workbook.add_worksheet() row = 0 for col, data in enumerate(self.fulllist): worksheet1.write_column(row, col, data) for col, data in enumerate(self.fulllist_percent): worksheet2.write_column(row, col, data) for col, data in enumerate(self.fulllist_click): worksheet3.write_column(row, col, data) for col, data in enumerate(self.additional_info): worksheet4.write_column(row, col, data) workbook.close()def processString(self): check = self.stringInput_field.toPlainText() check = [float(i) for i in check.replace(',', '.').split()] index = self.sampleChoose_list.selectedIndexes()[0].row() sample_path = self.sample_directory[1][index] sample_param = pd.read_excel(ospath(sample_path), header = None, sheetname = 3) param = sample_param[2].tolist() param_rank = scipy.stats.rankdata(param).astype(int) sample_2 = pd.read_excel(ospath(sample_path), header = None, sheetname = 0) fulllist_new = [] for i in range(len(sample_2.columns)): column_new = sample_2[i].tolist() fulllist_new.append(column_new) for i in range(len(check)): fulllist_new[i][0] = check[i] fulllist_percent_new = [] column_percent_new = [] for i in range(len(fulllist_new)): for j in range(len(fulllist_new[i])): percent_rank = scipy.stats.percentileofscore(fulllist_new[i], fulllist_new[i][j]) column_percent_new.append(percent_rank) fulllist_percent_new.append(column_percent_new) column_percent_new = [] fulllist_rank_new = [] for i in range(len(fulllist_new)): rank = len(fulllist_new[i]) - scipy.stats.rankdata(fulllist_new[i]) + 1 fulllist_rank_new.append(rank) column_corr_new = [] for i in range(len(fulllist_new)): correlation = scipy.stats.spearmanr(param_rank[::-1], fulllist_rank_new[i]) column_corr_new.append(correlation[0]) fulllist_click_new = [] for j in range (len(fulllist_percent_new)): middle = [] if column_corr_new[j] > 0: for i in range(len(fulllist_percent_new[j])): solve = column_corr_new[j] * fulllist_percent_new[j][i] middle.append(solve) else: for i in range (len(fulllist_percent_new[j])): solve = abs(column_corr_new[j]) * (100 - fulllist_percent_new[j][i]) middle.append(solve) fulllist_click_new.append(middle) check_click = [] for i in range(len(check)): if column_corr_new[i] > 0: click = fulllist_percent_new[i][0] * column_corr_new[i] check_click.append(click) elif column_corr_new[i] < 0: click = abs(column_corr_new[i]) * (100 - fulllist_percent_new[i][0]) check_click.append(click) len(check_click) list_of_rowsumm_new = [] rowsumm = 0 fulllist_click_newT = numpy.asarray(fulllist_click_new).T.tolist() for i in range(len(fulllist_click_newT)): rowsumm = sum(fulllist_click_newT[i]) list_of_rowsumm_new.append(rowsumm) percent_rowsumm_new = [] for i in list_of_rowsumm_new: x = scipy.stats.percentileofscore(list_of_rowsumm_new, i) percent_rowsumm_new.append(x) validity_new = scipy.stats.pearsonr(list_of_rowsumm_new[1:], param[1:]) validity_new = validity_new[0] validity_list = [] validity_list.append(validity_new) additional_info_new = [] additional_info_new.append(list_of_rowsumm_new) additional_info_new.append(percent_rowsumm_new) additional_info_new.append(validity_list) additional_info_new.append(param) self.fulllist_new = fulllist_new self.fulllist_percent_new = fulllist_percent_new self.fulllist_click_new = fulllist_click_new self.additional_info_new = additional_info_new self.validity_new = validity_new return self.fulllist_new, self.fulllist_percent_new, self.fulllist_click_new, self.additional_info_new, self.validity_newdef saveSampleStr(self): time = strftime("%d:%m:%Y %H-%M", gmtime()) options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileNameSave, _ = QFileDialog.getSaveFileName(self,"Сохранитьобработаннуюстроку","./Processed","Excel files (*.xlsx)", options=options) workbook = xlsxwriter.Workbook(fileNameSave +' ('+ time +')'+".xlsx") worksheet1 = workbook.add_worksheet() worksheet2 = workbook.add_worksheet() worksheet3 = workbook.add_worksheet() worksheet4 = workbook.add_worksheet() row = 0 for col, data in enumerate(self.fulllist_new): worksheet1.write_column(row, col, data) for col, data in enumerate(self.fulllist_percent_new): worksheet2.write_column(row, col, data) for col, data in enumerate(self.fulllist_click_new): worksheet3.write_column(row, col, data) for col, data in enumerate(self.additional_info_new): worksheet4.write_column(row, col, data) workbook.close()def refreshSample(self): sample_directory = [] sample_files = [] for (dirpath, dirnames, filenames) in walk('./Samples'): filenames = [f for f in filenames if not f[0] == '.'] sample_files.extend(filenames) break the_dir = "Samples" paths = [os.path.abspath(os.path.join(the_dir,filename)) for filename in os.listdir(the_dir) if not filename.startswith('.')] sample_directory.append(sample_files) sample_directory.append(paths) self.sample_directory = sample_directory self.sampleChoose_list.clear() self.sampleChoose_list.addItems(sample_directory[0]) self.sampleChoose_list.setSortingEnabled(True); self.sampleChoose_list.sortItems() return self.sample_directorydef refreshSample_2(self): sample_directory_2 = [] sample_files_2 = [] for (dirpath, dirnames, filenames) in walk('./Processed'): filenames = [f for f in filenames if not f[0] == '.'] sample_files_2.extend(filenames) break the_dir = "Processed" paths_2 = [os.path.abspath(os.path.join(the_dir,filename)) for filename in os.listdir(the_dir) if not filename.startswith('.')] sample_directory_2.append(sample_files_2) sample_directory_2.append(paths_2) processed_info = [] for i in range(len(sample_directory_2[0])): file_info = [] sample_file_2 = sample_directory_2[0][i] sample_path_2 = sample_directory_2[1][i] sample_info_2 = pd.read_excel(ospath(sample_path_2), header = None, sheetname = 3) sample_info_2 = sample_info_2.iloc[0][0:3] file_info.append(sample_file_2) sample_info_2_list = numpy.array(sample_info_2).tolist() file_info.extend(sample_info_2_list) processed_info.append(file_info) self.clickSample_list.setRowCount(len(processed_info)) self.clickSample_list.setColumnCount(4) labels = ['Имя', 'Массовыеотклики', 'Процентранг, %', 'Валидность'] self.clickSample_list.setHorizontalHeaderLabels(labels) red = QtGui.QColor(255, 5, 5); orange = QtGui.QColor(255, 157, 0); blue = QtGui.QColor(0, 46, 255); for row in range(len(processed_info)): for column in range(len(processed_info[row])): self.clickSample_list.setItem(row, column, QTableWidgetItem(str(processed_info[row][column]))) if column == 2: if processed_info[row][column] > 85: color = red; if processed_info[row][column] > 65 and processed_info[row][column] < 85: color = orange; if processed_info[row][column] < 65: color = blue; self.clickSample_list.item(row, column).setBackground(color); self.clickSample_list.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)if __name__ == '__main__':app = QApplication(sys.argv)win = MyMainWindow()sys.exit(app.exec_())
my app is launched in a window and UI is loaded by from ui_main import Ui_MainWindow
. My question is, how to make a desktop app? Do I need to do it in special Qt5 creator files? Or is possible to make it out of .ipynb-file from Anaconda? I am trying to make both MacOs and Windows versions, but I am pretty new to app-building and programming and do not know, how to begin.