Python Tkinter
目录
环境准备
建议在开始尝试 Tkinter 的时候先创建一个虚拟环境进行测试,首先先用 Conda 创建一个虚拟环境:
1conda create --name <name of your environment> python=3.8
其中 python=3.8
是可选项,也可以指定下载其他的 Python 版本。
然后激活环境:
1conda activate <name of your environment>
安装 Pip ,因为有些包不能通过 Conda 安装,而这个时候就需要使用 Pip,这里要注意一个点,要首先激活 Conda 的环境,然后在激活的虚拟环境中再通过 Conda 重新下载一个 Pip1,否则这时的虚拟环境中是不存在 Pip 的,所以如果直接执行 Pip 的命令会对原本的环境生效。
1conda install pip
这个时候通过查看 Conda 和 Pip 的环境可以查看是不是在虚拟环境中:
1conda list
2pip list
如果结果和原本环境中的输出是不一样的,那么就是成功创建虚拟环境并且激活虚拟环境了。
Tkinter 是什么2
tkinter
是 Python
标准的GUI库,可以使用这个库快速地创建GUI应用。
如何将 Python
文件编译成 .exe
文件3
安装编译工具
pyinstaller
1pip install pyinstaller
在文件路径下执行编译命令,其中
-w
参数是为了使得dos
窗口不会随着tkinter
窗口出现1pyinstaller -F -w demo.py #demo.py是待编译的代码文件名
编译完成后一般会在当前文件夹中生成一个
dist
的文件夹,一个build
文件夹和 一个demo.spec
文件,编译后的.exe
文件就在dist
文件夹中。
编译后 .exe
文件太大的问题
原因是在编译时会把 Python
环境及库一起打包到 .exe
文件中,如果当前的 Python
环境中安装了很多的包,那么就会把所有的库带上,导致编译后的 .exe
文件过大。
因此解决方案就是为该文件单独创建相应的 Python
虚拟环境,只安装要编译 Python
文件所依赖的库。具体步骤如下:
安装
virtualenv
用于创建虚拟环境1pip install virtualenv
创建一个虚拟环境,建议将这个虚拟环境放在需要打包的
Python
文件夹中,便于后面的处理1virtualenv py3exe_env #自定义命名虚拟环境的名称,这里是py3exe_env
创建完成之后进入到该目录
1cd py3exe_env/Script
在该目录下找到
activate.ps1
并执行1activate.ps1
然后在该虚拟环境下安装要编译的文件需要依赖的
Python
库,当然也要重新安装pyinstaller
。1pip install pyinstaller 2pip install conda #比如这里安装conda
然后在该虚拟环境中回到要编译的文件目录下输入编译命令:
1pyinstaller -F -w test.py #运行时不出现dos命令窗口
如何给 Tkinter 添加自定义图标
首先将要设置为图标的图片转换成 .ico
的格式,很多在线网站都能实现4。然后在运行 pyinstaller 之前给它加上一个参数5:
1pyinstaller -F -w --icon=<file name>.ico test.py #运行时不出现dos命令窗口
比如你的 .ico
文件是 icon.ico
那么完整命令应该是:
1pyinstaller -F -w --icon=icon.ico test.py #运行时不出现dos命令窗口
还有一种方法是利用 Tkinter 的方法6:
1import tkinter as tk
2
3# 创建主窗口
4window = tk.Tk()
5window.title("我的应用程序")
6
7# 设置图标
8window.iconbitmap("icon.ico") # 把 icon.ico 文件名改成你的文件名
9
10# 修改任务栏图标
11window.wm_iconbitmap("icon.ico") # 这里也要改
12
13window.mainloop()
还有一种方法是将图标硬编码进代码中7,首先获取图标的二进制数据:
1import base64
2
3with open('icon.ico', 'rb') as open_icon:
4 b64str = base64.b64encode(open_icon.read())
5 print(b64str)
输出的字符串即为图标文件的二进制数据。假设输出为b'abcdefg'
。然后利用获取的二进制数据,可以写出代码:
1import tkinter as tk
2from PIL import ImageTk # pip install --upgrade Pillow
3from base64 import b64decode
4
5window = tk.Tk()
6window.title('My Window')
7window.geometry('500x300')
8# window.iconbitmap('icon.ico')
9icon_img = b'abcdefg' # 这里替换成你自己图标文件的二进制数据
10icon_img = b64decode(icon_img)
11icon_img = ImageTk.PhotoImage(data=icon_img)
12window.tk.call('wm', 'iconphoto', window._w, icon_img)
13
14window.mainloop()
这里注意一个点,PIL 已经不再维护了,所以需要 pip install Pillow
,接口的代码是一样的。
Tkinter 快速入门
Tkinter 实战
用 Tkinter 实现了一个博客管理器,主要用于管理我自己的博客文章,源代码和程序仓库 请点我。