利用python开发自己的小工具
从最简单的开始:你的第一个GUI程序
首先,我们要用到tkinter
库,它是Python自带的,不需要额外安装:
importtkinterastk
# 创建主窗口
window=tk.Tk()
window.title("我的第一个GUI程序")
window.geometry("300x200")
# 添加一个标签
label=tk.Label(window, text="你好,Python!", font=("微软雅黑", 16))
label.pack()
# 添加一个按钮
defsay_hello():
print("大家好!")
button=tk.Button(window, text="点我打招呼", command=say_hello)
button.pack()
# 运行程序
window.mainloop()
把这段代码保存为hello.py
,运行它,瞬间就能看到一个简单的窗口程序!
进阶:打造实用小工具
来做点实际的东西!比如一个文件重命名工具:
importtkinterastk
fromtkinterimportfiledialog
importos
classFileRenamer:
def__init__(self):
self.window=tk.Tk()
self.window.title("文件批量重命名工具")
self.window.geometry("400x300")
# 选择文件夹按钮
self.select_btn=tk.Button(
self.window,
text="选择文件夹",
command=self.select_folder
)
self.select_btn.pack(pady=10)
# 显示选中路径
self.path_label=tk.Label(
self.window,
text="未选择文件夹",
wraplength=350
)
self.path_label.pack(pady=5)
# 前缀输入框
tk.Label(self.window, text="请输入文件名前缀:").pack(pady=5)
self.prefix=tk.Entry(self.window)
self.prefix.pack()
# 开始重命名按钮
self.rename_btn=tk.Button(
self.window,
text="开始重命名",
command=self.rename_files
)
self.rename_btn.pack(pady=20)
# 状态显示
self.status=tk.Label(self.window, text="")
self.status.pack(pady=10)
defselect_folder(self):
folder=filedialog.askdirectory()
iffolder:
self.folder_path=folder
self.path_label.config(text=f"已选择: {folder}")
defrename_files(self):
ifnothasattr(self, 'folder_path'):
self.status.config(text="请先选择文件夹!")
return
prefix=self.prefix.get()
ifnotprefix:
self.status.config(text="请输入前缀!")
return
try:
files=os.listdir(self.folder_path)
fori, fileinenumerate(files, 1):
old_path=os.path.join(self.folder_path, file)
new_name=f"{prefix}_{i}{os.path.splitext(file)[1]}"
new_path=os.path.join(self.folder_path, new_name)
os.rename(old_path, new_path)
self.status.config(text=f"成功重命名{len(files)}个文件!")
exceptExceptionase:
self.status.config(text=f"出错了:{str(e)}")
if__name__=="__main__":
app=FileRenamer()
app.window.mainloop()
这个小工具可以:
-
选择目标文件夹
-
输入文件名前缀
-
一键重命名所有文件
实用吧?而且代码结构清晰,注释详细,拿来就能用!
高级技巧:美化你的应用
光有功能还不够,咱们来给应用加点颜色!推荐使用customtkinter
库,它能让你的程序看起来超级专业:
importcustomtkinterasctk
classModernApp:
def__init__(self):
# 设置主题
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")
# 创建窗口
self.window=ctk.CTk()
self.window.title("现代化应用")
self.window.geometry("500x400")
# 创建标签
self.label=ctk.CTkLabel(
self.window,
text="现代化的Python应用",
font=("微软雅黑", 20)
)
self.label.pack(pady=20)
# 创建输入框
self.entry=ctk.CTkEntry(
self.window,
placeholder_text="请输入内容"
)
self.entry.pack(pady=10)
# 创建按钮
self.button=ctk.CTkButton(
self.window,
text="点击我",
command=self.button_click
)
self.button.pack(pady=10)
# 创建进度条
self.progress=ctk.CTkProgressBar(self.window)
self.progress.pack(pady=10)
self.progress.set(0.7)
# 创建开关
self.switch=ctk.CTkSwitch(
self.window,
text="开启/关闭"
)
self.switch.pack(pady=10)
defbutton_click(self):
text=self.entry.get()
iftext:
self.label.configure(text=f"你输入了:{text}")
if__name__=="__main__":
app=ModernApp()
app.window.mainloop()
打包发布:让所有人都能用上你的软件
写好程序后,最后一步是打包。我们用pyinstaller
把程序打包成exe文件:
# 先安装pyinstaller
pipinstallpyinstaller
# 打包命令
pyinstaller--windowed--icon=app.ico--name="我的应用"main.py
实战项目:便签本应用
让我们把学到的知识组合起来,做一个实用的便签本:
importtkinterastk
fromtkinterimportmessagebox
importjson
importos
classNoteApp:
def__init__(self):
self.window=tk.Tk()
self.window.title("我的便签本")
self.window.geometry("500x400")
# 加载笔记
self.notes=self.load_notes()
# 创建界面
self.create_widgets()
defcreate_widgets(self):
# 笔记列表
self.note_listbox=tk.Listbox(self.window, width=50)
self.note_listbox.pack(pady=10)
# 更新列表显示
self.update_note_list()
# 输入框
self.note_entry=tk.Entry(self.window, width=50)
self.note_entry.pack(pady=5)
# 按钮框架
btn_frame=tk.Frame(self.window)
btn_frame.pack(pady=5)
# 添加按钮
tk.Button(
btn_frame,
text="添加笔记",
command=self.add_note
).pack(side=tk.LEFT, padx=5)
# 删除按钮
tk.Button(
btn_frame,
text="删除笔记",
command=self.delete_note
).pack(side=tk.LEFT, padx=5)
defload_notes(self):
ifos.path.exists("notes.json"):
withopen("notes.json", "r", encoding="utf-8") asf:
returnjson.load(f)
return []
defsave_notes(self):
withopen("notes.json", "w", encoding="utf-8") asf:
json.dump(self.notes, f, ensure_ascii=False)
defupdate_note_list(self):
self.note_listbox.delete(0, tk.END)
fornoteinself.notes:
self.note_listbox.insert(tk.END, note)
defadd_note(self):
note=self.note_entry.get().strip()
ifnote:
self.notes.append(note)
self.save_notes()
self.update_note_list()
self.note_entry.delete(0, tk.END)
else:
messagebox.showwarning("警告", "请输入内容!")
defdelete_note(self):
selection=self.note_listbox.curselection()
ifselection:
index=selection[0]
self.notes.pop(index)
self.save_notes()
self.update_note_list()
else:
messagebox.showwarning("警告", "请选择要删除的笔记!")
if__name__=="__main__":
app=NoteApp()
app.window.mainloop()
这个便签本应用包含了我们学到的所有知识点:
-
GUI设计
-
文件操作
-
事件处理
-
数据持久化
进阶提升方向
-
学习更多GUI框架
-
PyQt5:功能强大,适合大型应用
-
Kivy:适合做跨平台应用
-
wxPython:原生界面,性能好
-
-
设计模式的运用
-
MVC架构
-
观察者模式
-
单例模式
-
-
性能优化技巧
-
使用多线程处理耗时操作
-
优化内存使用
-
提升响应速度
-
我们还可以将自己编写的程序,进行打包出来,提供给其他人进行使用
要将Python代码打包成可执行的`.exe`文件,可以使用`PyInstaller`工具。以下是详细步骤:
安装PyInstaller
首先,确保你已经安装了`PyInstaller`。如果没有安装,可以使用`pip`进行安装:
```bash
pip install pyinstaller
```
打包Python脚本
假设你的Python脚本名为`script.py`,你可以使用以下命令将其打包成`.exe`文件:
```bash
pyinstaller --onefile script.py
```
- `--onefile` 参数会将所有依赖项打包成一个单独的`.exe`文件。
- 如果你不需要打包成一个文件,可以省略`--onefile`参数,这样会生成一个包含多个文件的目录。
查找生成的`.exe`文件
打包完成后,生成的`.exe`文件会位于`dist`目录下。你可以在命令行中进入该目录并运行`.exe`文件:
```bash
cd dist
./script.exe
```
其他常用选项
- `--noconsole`:如果你的脚本是GUI应用程序,可以使用这个选项来隐藏控制台窗口。
- `--icon=icon.ico`:指定一个图标文件作为生成的可执行文件的图标。
- `--name=myapp`:指定生成的可执行文件的名称。
例如:
```bash
pyinstaller --onefile --noconsole --icon=icon.ico --name=myapp script.py
```
处理依赖项
如果你的脚本依赖于其他文件(如图片、配置文件等),你可以使用`--add-data`选项将这些文件包含在打包过程中。例如:
```bash
pyinstaller --onefile --add-data "path/to/datafile;." script.py
```
在Windows上,路径分隔符使用`;`,在Linux/macOS上使用`:`。
清理临时文件
打包完成后,PyInstaller会生成一些临时文件和目录(如`build`目录)。你可以手动删除这些文件以节省空间。
注意事项
- 打包后的`.exe`文件可能会比较大,因为它包含了Python解释器和所有依赖项。
- 如果你在打包过程中遇到问题,可以查看生成的`build`目录中的日志文件以获取更多信息。
通过以上步骤,你就可以将Python代码打包成`.exe`文件并在没有Python环境的Windows系统上运行了。