当前位置: 首页 > article >正文

利用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()

这个小工具可以:

  1. 选择目标文件夹

  2. 输入文件名前缀

  3. 一键重命名所有文件

实用吧?而且代码结构清晰,注释详细,拿来就能用!

高级技巧:美化你的应用

光有功能还不够,咱们来给应用加点颜色!推荐使用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设计

  • 文件操作

  • 事件处理

  • 数据持久化

进阶提升方向

  1. 学习更多GUI框架

    • PyQt5:功能强大,适合大型应用

    • Kivy:适合做跨平台应用

    • wxPython:原生界面,性能好

  2. 设计模式的运用

    • MVC架构

    • 观察者模式

    • 单例模式

  3. 性能优化技巧

    • 使用多线程处理耗时操作

    • 优化内存使用

    • 提升响应速度

我们还可以将自己编写的程序,进行打包出来,提供给其他人进行使用

要将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系统上运行了。


http://www.kler.cn/a/571486.html

相关文章:

  • X Window---图形接口
  • MATLAB代码,计算包络线的高点数值
  • 从 JVM 源码(HotSpot)看 synchronized 原理
  • 智能对讲机:5G+AI赋能下的石油工业新“声”态
  • Windows Adobe Photoshop 2025-v26.4.1.194-x64-CN[解压即用]
  • 基于规则的分词
  • 【TCP/IP协议栈】1. TCP/IP协议栈概述(体系、四/五层模型、IP、MAC)
  • 基础篇12-图像分割(中)--区域的方法
  • 【练习】【链表】力扣热题100 141. 环形链表
  • 51c自动驾驶~合集53
  • ArcGIS操作:07 绘制矢量shp面
  • 第四十五:创建一个vue 的程序
  • c语言、c++怎么将输入的一行字符根据空格分割成字符串数组或者整型数组
  • 理解 unserialize 函数的用法与安全注意事项
  • Markdown HTML 图像语法
  • Spring Boot 的 pom.xml 文件
  • 论文回顾:NeoBERT:新一代 BERT
  • 特征分解(Eigen decomposition)在深度学习中的应用与理解
  • flutter集成华为推送(Android)
  • build gcc