python program.exe не работает, но если я запускаю его с python, он работает - PullRequest
0 голосов
/ 11 февраля 2020

Я написал простую программу, используя python модули matplotlib.pyplot, numpy, sys и tkinter. Вот программа:

import matplotlib.pyplot as plt
import numpy as np
from tkinter import *
from tkinter.ttk import Combobox
import sys

def graf_funkcije(funkcija, range = (-15,15),  ime = "Funkcija", barva = "red"):
xos = []
yos = []
f = lambda x : eval(funkcija)
for x in np.arange(range[0],max(range),0.01):
    xos.append(x)
    yos.append(f(x))
print(xos,yos)
plt.plot(xos ,yos ,color = barva, label = ime)
plt.legend()
razd = np.arange(min(range) ,max(range)+1, 1)
razd2 = np.arange(-int(len(razd)/2), int(len(razd)/2+1), 1)
plt.axis([min(range), max(range) , -int(len(razd)/2), int(len(razd)/2)])
plt.plot((razd),len(razd)*[0], linewidth = 0.5, color = "black", linestyle = "dashed")
plt.plot(len(razd)*[0],razd2, linewidth=0.5, color="black", linestyle = "dashed")
plt.show()

def izris():
funkcija = vnesi_funkcijo.get()
ime = vnesi_ime.get()
barva = izberi_barvo.get()
slovar_barv = {"modra":"blue",
               "rdeča":"red",
               "zelena":"green",
               "bela":"white",
               "svetlo modra": "#e6e8fa",
               "črna": "black",
               "rumena": "yellow",
               "siva": "grey",
               "oranžna": "orange",
               "vijolična": "purple"}
barva = slovar_barv[barva]
window.destroy()
graf_funkcije(funkcija, (-15, 15), barva=barva, ime=ime)

def zaprim():
window.destroy()
sys.exit()

def pomoc():
window.destroy()
okno_pomoci = Tk()
okno_pomoci.title("GRAPHICUS - POMOČ")
okno_pomoci.geometry("300x600+10+10")

linearna_naslov = Label(okno_pomoci, text="LINEARNA FUNKCIJA", font="Helvetica 12 bold", fg="red")
linearna_primer1 = Label(okno_pomoci, text = "-3*x + 8", font="Helvetica 11")
linearna_primer2 = Label(okno_pomoci, text = "(3/4)*x - 12",font="Helvetica 11")
linearna_naslov.grid(row = 0, sticky = W, rowspan = 2)
linearna_primer1.grid(row=2, sticky=W, rowspan=1)
linearna_primer2.grid(row=3, sticky=W, rowspan=1)

kvadratna_naslov = Label(okno_pomoci, text="KVADRATNA FUNKCIJA", font="Helvetica 12 bold", fg = "red")
kvadratna_primer1 = Label(okno_pomoci, text="x**2", font="Helvetica 11")
kvadratna_primer2 = Label(okno_pomoci, text="-1/2*x**2+12", font="Helvetica 11")
kvadratna_naslov.grid(row=5, sticky=W, rowspan=2)
kvadratna_primer1.grid(row=7, sticky=W, rowspan=1)
kvadratna_primer2.grid(row=8, sticky=W, rowspan=1)

polinom_naslov = Label(okno_pomoci, text="POLINOMSKA FUNKCIJA", font="Helvetica 12 bold", fg="red")
polinom_naslov.grid(row=9, sticky=W, rowspan=2)

racionalna_funkcija_naslov = Label(okno_pomoci, text="RACIONALNA FUNKCIJA", font="Helvetica 12 bold", fg="red")
racionalna_funkcija_naslov.grid(row=11, sticky=W, rowspan=2)

absolutna_vrednost_naslov = Label(okno_pomoci, text="FUNKCIJA Z ABSOLUTNO VREDNOSTJO", font="Helvetica 12 bold", fg="red")
absolutna_vrednost_naslov.grid(row=13, sticky=W, rowspan=2)

kotne_funkcije_naslov = Label(okno_pomoci, text="KOTNE FUNKCIJE", font="Helvetica 12 bold", fg="red")
kotne_funkcije_naslov.grid(row=15, sticky=W, rowspan=2)

okno_pomoci.mainloop()
while True:
window = Tk()
window.title('GRAPHICUS')
window.geometry("400x300+10+10")
btn = Button(window, text="IZRIŠI GRAF", bg="#e6e8fa",fg = "black", command = izris)
btn.place(relx = 0.2, rely = 0.8, anchor = CENTER)
zapri = Button(window, text="ZAPRI", bg="#e6e8fa",fg = "black", command = zaprim)
zapri.place(relx =0.85, rely = 0.8, anchor = CENTER)
napis_barva = Label(window, text="Barva grafa", fg='black', font=("Helvetica", 10))
napis_barva.place(anchor = CENTER, relx = 0.58, rely = 0.53)

gumb_pomoc = Button(window, bg = "#e6e8fa", text = "POMOČ", command = pomoc)
gumb_pomoc.place(anchor = CENTER, rely = 0.8, relx = 0.55)

napis_funkcija = Label(window, text='VNESI FUNKCIJO f(x):', font =("Helvetica",12))
napis_funkcija.place(anchor = CENTER, rely = 0.1, relx = 0.5)
vnesi_funkcijo = Entry(window, bg = "#e6e8fa")
vnesi_funkcijo.place(anchor = CENTER, relx = 0.5, rely = 0.2)

ime_funkcija = Label(window, text='IME FUNKCIJE:', font=("Helvetica", 12))
ime_funkcija.place(anchor = CENTER, rely = 0.3, relx = 0.5)
vnesi_ime = Entry(window, bg="#e6e8fa")
vnesi_ime.place(anchor=CENTER, relx=0.5, rely=0.4)

var = StringVar()
var.set("modra")
data=("modra","rdeča","zelena","bela","svetlo modra","črna","rumena","siva", "oranžna", "vijolična")
izberi_barvo=Combobox(window, values=data)
izberi_barvo.place(anchor = CENTER, relx = 0.7, rely = 0.6)

window.mainloop()

Я использовал метод cx_Freeze, чтобы преобразовать его в exe-форму и запустить на других компьютерах без python. Мой установочный файл был следующим (идентификаторы были немного изменены после публикации здесь, но с ними все в порядке):

from cx_Freeze import setup, Executable

base = None    

executables = [Executable("graphicus.py", base=base)]

packages = ["matplotlib.pyplot", "sys", "numpy", "tkinter"]
options = {
  'build_exe': {    
    ' packages':packages,
},    
}

setup(
name = "graphicus",
options = options,
version = "0.1",
description = 'Gamma testing',
executables = executables
)

Мне удалось создать папку с exe и всеми сгенерированными файлами, но когда я запустил exe, он только мигает, поэтому я запустил его в windows Powershell и получил следующее сообщение об ошибке:

printscreen of the error message

Можете ли вы помочь мне? Что вы предлагаете?

...