文章目录
主要是为了走一遍python创建exe的流程。
步骤
1、新建一个项目,名称为:desktop_widget
2、创建一个python文件,名称为:desktop_widget.py,内容如下:
py
import tkinter as tk
from datetime import datetime
class DesktopWidget:
def __init__(self):
self.root = tk.Tk()
# --- 核心设置:让窗口像桌面图标/挂件 ---
self.root.title("桌面小工具")
self.root.geometry("200x60+100+100") # 宽x高+离左距离+离上距离
# 去除标题栏和边框 (关键步骤)
self.root.overrideredirect(True)
# 设置窗口透明度 (0.0 - 1.0),0.9 表示轻微透明,更有质感
self.root.attributes("-alpha", 0.9)
# 【重要】让窗口置顶,但不在任务栏显示 (Windows 特定)
# 如果需要穿透点击(鼠标点不到它),需额外设置,这里先保持可交互
self.root.attributes("-topmost", True)
# 设置背景色和透明色 (实现不规则形状或透明背景的关键)
bg_color = "#2b2b2b" # 深灰色背景
text_color = "#ffffff"
self.root.configure(bg=bg_color)
# --- 内容区域 ---
self.label_time = tk.Label(
self.root,
text="",
font=("Arial", 16, "bold"),
bg=bg_color,
fg=text_color,
cursor="hand2" # 鼠标放上去变成手型
)
self.label_time.pack(expand=True, fill="both")
# 绑定鼠标事件以实现拖拽
self.label_time.bind("<ButtonPress-1>", self.start_move)
self.label_time.bind("<B1-Motion>", self.on_move)
# 双击关闭
self.label_time.bind("<Double-Button-1>", lambda e: self.root.destroy())
# 启动更新循环
self.update_time()
# 启动主循环
self.root.mainloop()
def start_move(self, event):
"""记录鼠标按下时的位置"""
self.x = event.x
self.y = event.y
def on_move(self, event):
"""计算移动距离并移动窗口"""
deltax = event.x - self.x
deltay = event.y - self.y
x = self.root.winfo_x() + deltax
y = self.root.winfo_y() + deltay
self.root.geometry(f"+{x}+{y}")
def update_time(self):
"""每秒更新时间"""
now = datetime.now().strftime("%H:%M:%S")
date = datetime.now().strftime("%m-%d")
self.label_time.config(text=f"{date}\n{now}")
# 1000毫秒后再次调用自己
self.root.after(1000, self.update_time)
if __name__ == "__main__":
try:
app = DesktopWidget()
except KeyboardInterrupt:
pass
3、安装依赖,命令为:
bash
pip install pyinstaller
4、准备图标
阿里巴巴矢量图标库下载一个图片,在通过在线工具转为icon格式,命令为my_icon.ico,并放到项目里。
5、执行安装命令
bash
pyinstaller --onefile --windowed --icon=my_icon.ico desktop_widget.py
这样dist文件夹下会生成ext文件,进入到该目录,发送到桌面快捷方式,点击该快捷方式,桌面出现时间控件。