【问题标题】:Trying to convert python file to executable试图将python文件转换为可执行文件
【发布时间】:2020-12-04 06:12:34
【问题描述】:

我是一个初学者,使用 tkinter 制作了我的第一个 GUI 计算器。我想将我的 py 文件转换为 exe 文件。我尝试使用 pyinstaller,auto-py-to-exe 但是当文件准备好并运行时,它显示了 windows错误框Cannot run Script main,我的文件名是main。

import getpass
from os import mkdir
import tkinter,os,time
from functools import partial
from tkinter import PhotoImage
from tkinter.constants import SEL
class Calculator(tkinter.Tk):
    '''This class creates calculator using tkinter module'''
    def __init__(self):
        super().__init__()
        
        # Changing height and width of window
        self.geometry('279x316')
        self.resizable(False,False)
        self.title('Calculator')
        image=PhotoImage('download.ico')
        self.iconbitmap(image)
        # Creating tkinter varible to store what user has entered
        self.__store_value=tkinter.StringVar()
        self.__store_value.set('')
        #Creating entry widget for input
        self.__input_user=tkinter.Entry(self,font='lucidia 20 bold',textvariable=self.__store_value) 
        self.__input_user.pack(fill='x')
        self.bind('<Return>',partial(self.click,'='))
        # This Buttons will be ther in calculator
        self._button_dict={"C":"C","(":"(",")":")","/":"/",
                          "9":9,"8":8,"7":7,"*":"*",
                          "6":6,"5":5,"4":4,"+":"+",
                          "3":3,"2":2,"1":1,"-":"-",
                          "His":"His","0":0,".":".","=":"="}
                          
    
    def create_button(self,row=5,column=4):
        '''Creates button in the window,button_dict contains name of each button and an argument to be given to click function when pressed,no of rows in calculator and no. of columns'''
        self.__main_frame=tkinter.Frame(self)
        self.__main_frame.pack(fill='both')
        k=0
        for i in range(row):
            for r in range(column):
                
                try:
                    button=tkinter.Button(self.__main_frame,text=list(self._button_dict.keys())[k],command=partial(self.click,self._button_dict[list(self._button_dict.keys())[k]]),font='lucidia 20 bold')
                    button.grid(row=i,column=r,ipadx=15)
                    self._button_dict[list(self._button_dict.keys())[k]]=button
                    k+=1
                
                except Exception as e:
                    k+=1

                
        #    configuring each button
        self._button_dict['His'].grid(ipadx=1)
        self._button_dict['C'].grid(ipadx=13)
        self._button_dict['('].grid(ipadx=18)
        self._button_dict[')'].grid(ipadx=18)
        self._button_dict['.'].grid(ipadx=18)
        self._button_dict['+'].grid(ipadx=11)
        self._button_dict['='].grid(ipadx=12)
        self._button_dict[r'*'].grid(ipadx=14)

        
       
    def click(self,arg,*event):
        if arg=='C':
            '''If click on C clears the text area'''
            self.__store_value.set('')
            self.update()
        elif arg=='His':
            if os.path.exists(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt"):
                self.__his=tkinter.Tk()
                self.__his.title('History')
                im=PhotoImage('History.ico')
                self.__his.iconbitmap(im)
                with open(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt") as f:
                    for i in f.read().split('\n'):
                        if i=='':
                            pass
                        else:
                            tkinter.Label(self.__his,text=i,relief='solid').pack()
            else:
                self.__store_value.set("Error")
                self.update()
                
        
        elif arg=='=':
            if self.__store_value.get()=='':
                pass
            else:
        
                try:
                    l=self.__store_value.get()
                    self.__store_value.set(eval(self.__store_value.get()))
                    
                    if os.path.exists(f"C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt"):
                        with open(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt',"a") as f:
                            f.write(f"{l}={eval(l)}\n")
                    else:
                        try:
                            os.mkdir(f'C:\\Users\\{getpass.getuser()}\\Calculator')
                        except Exception as e:
                            pass
                        with open(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt',"a") as f:
                            f.write(f"{l}={eval(l)}\n")
                except Exception as e:
                    self.__store_value.set('Error')
                    self.update()
        else:
            if self.__store_value.get()=='Error':
                self.__store_value.set(arg)
                self.update()
            else:
                self.__store_value.set(f'{self.__store_value.get()}{arg}')
                self.update()
    def on_closing(self):
        try:
            os.remove(f'C:\\Users\\{getpass.getuser()}\\Calculator\\Log.txt')
                
        except Exception as e:
            pass
        self.destroy()
if __name__ == "__main__":
    app=Calculator()
    app.create_button()
    app.protocol("WM_DELETE_WINDOW", app.on_closing)
    app.mainloop()

    

上传 ico 图片时出错,您可以在 https://github.com/01TanmayDaga/Calculator 找到图片

请帮帮我!!

【问题讨论】:

  • 尝试在命令提示符下运行 exe 并发布命令提示符中显示的错误消息。
  • 这能回答你的问题吗? Bundling data files with PyInstaller (--onefile)
  • 看,当你从dist文件夹运行程序时,你的图标路径和应用程序内部的所有内容都是错误的,因此你的代码会出错。尝试将 exe 移至项目目录,即 .py 脚本所在的位置。而且这也可能只是众多错误之一,没有错误代码就很难知道问题到底是什么(所以我只是猜到了)。
  • @acw1668 我尝试在 cmd 中运行 exe,但它没有显示任何错误代码,并且在 windows 对话框中显示了相同的错误消息。

标签: python tkinter module tcl exe


【解决方案1】:

对此有一个非常简单的解决方案,确保将所有外部文件(图标、图像等)放入包含可执行文件 (.exe) 的文件夹中。

对于PyInstaller,.exe 被放入一个名为dist 的文件夹中,只需将您在程序中使用的所有外部文件移至该文件夹即可。

希望对你有所帮助, 干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多