Problem with pynsist, I can't make the application run from the start menu

306 Views Asked by At

I wrote a simple program using PyQt5. I used also th Pynsist to make it execute on other computers. every thing was good, but the problem was when I try to execute the application from the Start Menu! it opens a console and close it very fast.

I made a long search and i tried to do what others did, but i still have the same problem!

This is a part of my code:

import os, sys
import array
import numpy as np
import matplotlib.pyplot as plt
from pandas import read_csv

## second part of import
from PyQt5 import QtWidgets, uic,QtGui,QtCore
from ui import test1
import gc


import statistics


class window(test1.Ui_MainWindow,QtWidgets.QMainWindow):
    x1=[]
    x2 = []
    h=[]
    x1_1 = []
    x1_20 = []
    x_cor = []
    x_graph = []
    x_cal = []
    x_cal_squ =[]
    x_cal_mul = []
    def __init__(self):
            super(window,self).__init__()
            self.setupUi(self)

            self.All()

    def All(self):
            self.toolButton.clicked.connect(self.select_file)
            self.pushButton.clicked.connect(self.correcting)
            self.toolButton_2.clicked.connect(self.graphic_show)
            self.pushButton_3.clicked.connect(self.checked_data)
            self.pushButton_4.clicked.connect(self.calculate)
    def select_file(self):
        if not self.lineEdit.text() == "" and not self.lineEdit_2.text() == "" and not self.lineEdit_3.text() == "":
            if self.lineEdit_3.text() == "32" or self.lineEdit_3.text() == "8":




                file,ext = QtWidgets.QFileDialog.getOpenFileName()
        # reading binary file
                count = int(os.stat(file).st_size/2)   
                statinfo = os.stat(file)

                print(statinfo,"   ",count)
                with open(file, 'rb') as fb:
                    bin_1 = array.array("h")
                    print("sss")
                    bin_1.fromfile(fb, count)


                print(len(bin_1))
                res =''
                Channel_number = int(str(self.lineEdit_3.text()))
                for x in range(1,Channel_number + 1):    # range for 32 bit. for 8 bit the range will be (1,9)
                        y = str(self.lineEdit_2.text())  # folder name
                        y_2 = str(self.lineEdit.text())  # file name
                        folder_path_1 = os.path.isdir(os.getcwd() + '/' + y +'/' + y+'{}'.format(x))
                        if not folder_path_1:
                            folder_path = os.makedirs(os.path.join(os.getcwd(), y + '/' + y +'{}'.format(x)))
        # write the data from every channle to it's folder with txt format        
                for x in range(1,Channel_number + 1):    # range for 32 bit. for 8 bit the range will be (1,9)
                        y = str(self.lineEdit_2.text())
                        folder_name = str(self.lineEdit.text())
                        folder_path_1 = os.path.isdir(os.getcwd() + '/' + y +'/' + y+'{}'.format(x))
                        if not folder_path_1:
                            folder_path = os.makedirs(os.path.join(os.getcwd(), y + '/' + y +'{}'.format(x)))

                        file_name= y_2 +'{}.txt'.format(x)
                        fig_name = y_2 +'{}.png'.format(x)
                        file_name_2 = y_2 + '_new{}.txt'.format(x)
                        fig_name_2 = y_2 + '_new{}.png'.format(x)
                        file_name_3 = 'result{}.txt'.format(x)
                        file_name_20 = y_2 + '_new20.txt'

                        with open (os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), file_name),"w") as wf:
                            res += str(x)
                            for n in range(0,len(bin_1),Channel_number):




                                if x == 20:
                                    wf.writelines("{:.2f}\n".format(bin_1[n+(x-1)]*0.65))
                                else:

                                    wf.writelines("{:.2f}\n".format(bin_1[n+(x-1)]*-0.043))

                        with open(os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), file_name),'r') as ff:
                                x1 = ff.readlines()


                                x1 = [float(i) for i in x1]
                                x1 = x1
                                x2=x1
                                x1_max = max(x1, key=abs)
                                x1_min = min(x1)

                                x1_sum = sum(x1)

                                x1_av = statistics.mean(x1)
                                x2 = [float(i) for i in x2]
                                listmask=x1_av
                                for num in range(len(x2)):

                                    if x2[num] == x1_max and num >= 0 and num <= int(len(x2)/4):
                                        #print("nummmmmm = :",num)
                                        x2[0:int(len(x2)/4)] = x2[int(3*len(x2)/4):(len(x2))]

                                    elif x2[num] == x1_max and num > int(len(x2)/4) and num <= int(len(x2))/2:
                                         x2[(num-500):(num+int(len(x2)/4))] = x2[(int(3*len(x2)/4)-500):(len(x2))]
                                    elif x2[num] == x1_max and num > int((len(x2))/2) and num <= (int(3*len(x2)/4)):
                                         x2[(num-500):(int(len(x2))-500)] = x2[0:int(len(x2)/2)]
                                         x2[(len(x2)-500):len(x2)] = x2[0:500]



                                    elif x2[num] == x1_max and num >= int(3*len(x2)/4): # and num <= (len(x2)):
                                         x2[int(3*len(x2)/4):len(x2)] = x2[0:int(len(x2)/4)]






                                print(x1_max)
                                xx1_av = statistics.mean(x2)
                                h = (x1_max - xx1_av)


                                #print( xx1_av, x1_av , h)
                                #for n in range(1,33):
                                with open("results_2.txt",'a') as test:

                                   test.writelines("{:.2f}\n".format(h*(-0.043)))

                              #  from pandas import read_csv
                                (read_csv(os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), file_name))).plot( color='red')
                                plt.savefig(os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), fig_name))
                                #plt.show()

                        with open(os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), file_name),"r")  as ff:
                            x1 = ff.readlines()
                            x1 = [float(i) for i in x1]
                            with open(os.path.join(os.getcwd() + '/' + y +'/' + y+'{}'.format(x), file_name_2),"w")  as f:
                                for num in range(len(x1)):
                                    x1[num] = (x1[num] - xx1_av)

                                    f.writelines("{:.2f}\n".format(x1[num]))
        # read the new files and write the results of max in new file for the further analysis
                del x1[:]
                gc.collect()

            else:
                QtWidgets.QMessageBox.information(None, "Error", "Make sure of the channels number!!!")
        else:
            QtWidgets.QMessageBox.information(None, "Error", "Fill all the required information")



......
if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    qt_app = window()
    qt_app.show()
    app.exec_()

and the installer.cfg file:

[Application]
name=PythonApplication12
version=1.0
# How to launch the app - this calls the 'main' function from the 'PythonApplication12' package:
entry_point=test1:Ui_MainWindow
extra_preamble=PythonApplication12.py


console=true


[Python]
version=3.6.7
bitness = 64
include_msvcrt=true


[Include]
# Packages from PyPI that your application requires, one per line
# These must have wheels on PyPI:
pypi_wheels = PyQt5==5.11.3
     numpy==1.16.0
     pandas==0.23.4
     PyQt5==5.13.0
     matplotlib==3.0.2
     PyQt5-sip==4.19.18
Packages = PyQt5
     numpy
     pandas
     matplotlib
     statistics
     tkinter
     _tkinter






# Other files and folders that should be installed
files = ui/test1.py
        ui/__init__.py
        ui/test1.ui
        ui
        PythonApplication12.py
        lib
1

There are 1 best solutions below

1
On

The code asked about ('cycler'), then (Matplotlib requires dateutil), (six), (pytz)... I spend all the night reinstalling and adding these packages to the cfg file.... but after all it works! It was much easier to install Python on the other computer...!

The whole problem was with matplotlib!