Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] como faço para transformar esse código em um arquivo executável que consiga carregar imagens?

fiz esse código simples para treinar um pouco, mas fiquei curioso em como fazer um arquivo executável, utilizei o pyinstaller para isso, e criei o executável, mas quando o executável tenta carregar a imagem, ele so fecha sem carregar a imagem e o resultado da expressão, como faço para que o executável consiga carregar uma imagem?

from PIL import Image


class ExpressaoNumerica:
    @staticmethod
    def calcular_expressao():
        try:
            expressao = input("Qual a sua expressão numerica?:")
            resultado = eval(expressao)
            return f"{expressao} = {round(resultado)}"
        except Exception as conta:
            return f"Ouve um erro na execução desta expressão: {conta}"

    @staticmethod
    def carregar_imagem():
        imagem = Image.open("midia/eu sabo.jpg")
        return imagem.show()

    def front(self):
        resultado_expressao = self.calcular_expressao()
        print(resultado_expressao)
        print(self.carregar_imagem())

    def __str__(self):
        return self.front()


if __name__ == "__main__":
    expressao_numerica = ExpressaoNumerica()
    expressao_numerica.__str__()

    input("Pressione Enter para sair...")
1 resposta
solução!

Olá, Victor!

Pelo que você descreveu, parece que o problema está relacionado ao caminho da imagem que você está tentando abrir no seu código. Quando você executa o seu código Python diretamente, o caminho da imagem é relativo ao local onde o script Python está sendo executado. No entanto, quando você compila o seu código para um arquivo executável usando o PyInstaller, o caminho da imagem precisa ser relativo ao local onde o arquivo executável está sendo executado.

Uma solução possível para o seu problema seria utilizar o módulo os para obter o caminho do diretório atual e concatená-lo com o caminho da imagem. Veja como isso pode ser feito:

import os
from PIL import Image

class ExpressaoNumerica:
    @staticmethod
    def calcular_expressao():
        try:
            expressao = input("Qual a sua expressão numerica?:")
            resultado = eval(expressao)
            return f"{expressao} = {round(resultado)}"
        except Exception as conta:
            return f"Ouve um erro na execução desta expressão: {conta}"

    @staticmethod
    def carregar_imagem():
        # Obter o caminho do diretório atual
        dir_path = os.path.dirname(os.path.realpath(__file__))
        # Concatenar o caminho do diretório atual com o caminho da imagem
        imagem_path = os.path.join(dir_path, "midia/eu sabo.jpg")
        imagem = Image.open(imagem_path)
        return imagem.show()

    def front(self):
        resultado_expressao = self.calcular_expressao()
        print(resultado_expressao)
        print(self.carregar_imagem())

    def __str__(self):
        return self.front()


if __name__ == "__main__":
    expressao_numerica = ExpressaoNumerica()
    expressao_numerica.__str__()

    input("Pressione Enter para sair...")

Dessa forma, independentemente de onde o script Python ou o arquivo executável estiverem sendo executados, o caminho da imagem sempre será o correto. É só uma sugestão, vale testar.

Espero ter ajudado e bons estudos!