猫史档案馆


【CJW python小讲堂】tkinter深度讲解(下)

用户:520669已退猫520669已退猫查看:0 回复:1 评论:0 创建时间:2019-08-20T12:58:15


四、Python 打包发布

我们知道,C++生成的exe 有自己打包工具:advanced installer,那么python也有自己打包工具:pyinstaller.exe ,

首先安装pyinstaller,生成在环境目录:Scripts
在搜索框输入cmd
执行  pyinstaller -F  -w   XXX.py
生成可执行文件exe在 dist目录下面
————————————————

1、组件

本软件中用到了大概5个组件:

1.1、Button按钮

语法如下:创建了名为Play播放的按钮,绑定了命令sound_play。

b1 = ttk.Button(xin, text = 'Play\n播放', width = 10, command = sound_play)
b1.grid(row=3,column=4, padx=10, pady=10)


1.2、Label标签

语法如下:创建了名为Model的标签。

mm1 = ttk.Label(xin, text = 'Model')
mm1.grid(row=0,column=1)


1.3、Combobox下拉列表

number = tk.StringVar()
LessonChosen = ttk.Combobox(xin, width=12, textvariable=number, state='readonly')
LessonChosen['values'] = lesson_name # 设置下拉列表的值
LessonChosen.grid(column=2, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
LessonChosen.current(lesson_name.index(str(WW[0]))) # 设置下拉列表默认显示的值,0为 LessonChosen['values'] 

的下标值
1.4、LabelFrame

labelframe1 = ttk.LabelFrame(xin, text='単語 (第 课,第 个单词)', height = 80, width=300) # 信息区
labelframe1.grid(row=3,column=1, columnspan = 3 , padx=10, pady=10) 
labelframe1.propagate(0) # 使组件大小不变,此时width才起作用
ttk.Label(labelframe1, text = " ",font = ('Mincho, 20')).pack(fill="both", expand="yes")


1.5、Radiobutton单选按钮

#单选按钮radiobutton
v=tk.IntVar() 
v.set(1)
#f1.bind('<KeyPress-1>',word_know)
f1 = tk.Radiobutton(xin,text = 'Know', font =24, variable=v,value=1, command = word_know) 
f1.grid(row=6,column=2)
f1.configure(state='disabled')
#f2.bind('<KeyPress-2>',word_unknow)
f2 = tk.Radiobutton(xin,text = 'Unknow',font =24,variable=v,value=2, command = word_unknow) 
f2.grid(row=6,column=3)
f2.configure(state='disabled')


下面贴一段与『Play播放』按钮绑定的sound_play函数的命令:

#Play按钮
def sound_play():
    import winsound
    import time
    import os
    global xin
    global word_list
    if back_canshu == 0:
        if len(word_list_now)==0:
            showinfo(title = 'Message', message = '恭喜,本次单词已经背完!')
            if BSM == 0:
                word_list1 = [R[1:3]]
                for i in range(len(word_list)):
                    if len(word_list[i])>=6:
                        if word_list[i][5]!='':
                            word_list1.append(word_list[i])
                del word_list
                word_list =word_list1
                #保存file.txt
                import os
                os.remove(r'.\file.txt')
                #写出单词表信息
                write_file_word(word_list,r'.\file.txt')
        else:
            if len(word_list_now)>=1:
                lesson = int(word_list_now[0][0])
                mn = int(word_list_now[0][1])
                if os.path.exists(r".\audio\L"+str(lesson)+"\L"+str(lesson)+"_"+str(mn)+".wav")==False:
                    winsound.PlaySound(r".\audio\Windows_Background.wav", winsound.SND_FILENAME|winsound.SND_ASYNC)
                    #第三行:labelframe单词
                    labelframe1 = ttk.LabelFrame(xin, text='単語    (第 '+str(lesson)+' 课,第 '+str(mn)+' 个单词)', height = 80, width=300) # 信息区
                    labelframe1.grid(row=3,column=1, columnspan = 3 , padx=10, pady=10) 
                    labelframe1.propagate(0) # 使组件大小不变,此时width才起作用
                    ttk.Label(labelframe1, text = word_list_now[0][2], font = ('Mincho, 20')).pack(fill="both", expand="yes")
                else:
                    winsound.PlaySound(r".\audio\L"+str(lesson)+"\L"+str(lesson)+"_"+str(mn)+".wav", winsound.SND_FILENAME|winsound.SND_ASYNC)
    else:
        lesson = int(word_back[-back_canshu][0])
        mn = int(word_back[-back_canshu][1])
        if os.path.exists(r".\audio\L"+str(lesson)+"\L"+str(lesson)+"_"+str(mn)+".wav")==False:
            winsound.PlaySound(r".\audio\Windows_Background.wav", winsound.SND_FILENAME|winsound.SND_ASYNC)
        else:
            winsound.PlaySound(r".\audio\L"+str(lesson)+"\L"+str(lesson)+"_"+str(mn)+".wav", winsound.SND_FILENAME|winsound.SND_ASYNC)


2、软件封装打包

Python Tkinter打包封装的方法有:PyInstaller, py2exe, wxPython等方法。答主只是用了PyInstaller来打包,感觉特别好用,对其它方法不做评论。

网上有很多打包方法:Python | 用Pyinstaller打包发布exe应用,请自行参考!

要说的是,打包过程中可以添加如下指令,自行尝试打包后的差异:

-w指令,在指令内加入-w命令可以屏蔽发布的exe应用带命令行调试窗口;

-F指令,使用-F指令可以把应用打包成一个独立的exe文件,否则是一个带各种dll和依赖文件的文件夹;

-i指令,可以自定义图标。

简单写一下用pyinstaller打包软件的过程:

①准备好打包文件:

 

aiueo.py为代码,audio文件夹、tango文件夹和file.txt为程序关联调用的文件,a.ico为软件图标。

②在安装的Python文件夹下的Scripts目录下(包含pyinstaller.exe),shift+右键>>在此处打开命令窗口:

 

③输入:pyinstaller.exe -i C:\Users\Naples\aiueo\a.ico -w C:\Users\Naples\aiueo\aiueo.py 回车。

-i C:\Users\Naples\aiueo\a.ico 为图标所在的目录;

-w C:\Users\Naples\aiueo\aiueo.py 为程序所在目录。

 

④在C:\Python34\Scripts目录下就会出现这三个文件:

 

可以将第一、三个文件删除,只留下dist文件夹。将和程序关联的audio文件夹、tango文件夹和file.txt三个文件夹拷贝到dist/aiueo/目录下。双击aiueo.exe,程序就可以使用了。

 

可以发送桌面快捷方式,也可以将软件打包拷贝到相同平台下的电脑上使用。


回复

上一页1 页 / 共 1下一页
520669已退猫520669已退猫

顶顶

点赞0


评论