?
將程序打包可以使得所有Windows帶有python虛擬機的電腦進行使用,打包的內容有代碼加外部資源(如logo圖片等)
步驟:
1)創建程序的代碼
2)生成配置文件——用于獲得打包的資源,將資源保存在運行程序的電腦的臨時文件中,這里臨時文件是resources文件夾
3)修改python源代碼:因為此時的程序的資源目錄resources不一定在當前項目的目錄下,而是在打包后再次運行時一定要將資源解壓縮到臨時文件當中
4)創建配置文件:因為程序打包需要引用資源文件,因此必須手工地對資源的路徑進行定義,就需要根據打包程序生成一個.spec配置文件,
pyi-makespec -F *.py給定要打包的程序
?
5)編輯spc文件,定義我們需要使用資源路徑打開.spec文件——找到datas=[],項,修改為data = [("resources","resources")]里面放的是一個元組
6)程序打包:pyinstaller -F *.spec
7)若沒有則使用pyinstaller -F *.py,
8)打包結束后就會有*.exe文件了
?
?
'''將程序打包可以使得所有Windows帶有python虛擬機的電腦進行使用,打包的內容有代碼加外部資源(如logo圖片等)步驟:
1)創建程序的代碼
2)生成配置文件——用于獲得打包的資源,將資源保存在運行程序的電腦的臨時文件中,這里臨時文件是resources文件夾
3)修改python源代碼:因為此時的程序的資源目錄resources不一定在當前項目的目錄下,而是在打包后再次運行時一定要將資源解壓縮到臨時文件當中
4)創建配置文件:因為程序打包需要引用資源文件,因此必須手工地對資源的路徑進行定義,就需要根據打包程序生成一個.spec配置文件,
pyi-makespec -F *.py給定要打包的程序
5)編輯spc文件,定義我們需要使用資源路徑打開.spec文件——找到datas=[],項,修改為data = [("resources","resources")]里面放的是一個元組
6)程序打包:pyinstaller -F *.spec
7)若沒有則使用pyinstaller -F *.py,
8)打包結束后就會有*.exe文件了
'''import tkinter,os#導入創建窗體的相關模塊
import sys#導入與操作系統交互的模塊def get_resource_path(relative_path):#利用此函數實現資源路徑的定位if getattr(sys,"frozen",False):base_path = sys._MEIPASSelse:base_path = os.path.abspath(".")#獲得當前目錄路徑return os.path.join(base_path,relative_path)#獲得絕對路徑# image_path = image_path = r'C:\Users\jinlin\Desktop\python_further_study\GUI編程\resources' + os.sep + 'linlianqin.gif'#只支持gif格式的圖片'''
下面這個語句提示無法找到路徑提示錯誤,這里特別需要注意:
1)修改代碼后需要重新按照以上步驟進行,尤其不能忘記了修改配置文件的datas
2)必須得先pyi-makespec -F *.py指定要打包的程序,再修改配置文件,再pyinstaller -F *.spec程序打包
'''print(get_resource_path(os.path.join("resources","linlianqin.gif")))
image_path = get_resource_path(os.path.join("resources","linlianqin.gif"))#修改圖片的路徑,從上面定義的資源路徑中獲取圖,get_resource_path(os.path.join("臨時資源文件夾","圖片名稱"))class Mainwindow():#創建窗口類def __init__(self):root = tkinter.Tk() # 創建主體窗口root.title('linlianqin') # 定義窗體的名字root.geometry('500x500') # 定義窗體的初始大小root.maxsize(1200, 1200) # 設置窗口可以顯示的最大尺寸#---------------以下是對按鈕的設置---------------photo = tkinter.PhotoImage(file = image_path)#設置按鈕的外觀,這里是將圖片設置為按鈕的外觀button = tkinter.Button(root,text = 'linlianqin',image = photo,compound = 'bottom')#創建按鈕button.pack()#顯示按鈕root.mainloop()#顯示窗口if __name__ == '__main__':Mainwindow()#將窗體類實例化
?