pycharm创建桌面时间控件小程序

作者:chushiyunen不懂代码的小白日期:2026/3/15

文章目录

    • 步骤

主要是为了走一遍python创建exe的流程。

步骤

1、新建一个项目,名称为:desktop_widget
2、创建一个python文件,名称为:desktop_widget.py,内容如下:

1import tkinter as tk
2from datetime import datetime
3
4
5class DesktopWidget:
6    def __init__(self):
7        self.root = tk.Tk()
8
9        # --- 核心设置:让窗口像桌面图标/挂件 ---
10        self.root.title("桌面小工具")
11        self.root.geometry("200x60+100+100")  # 宽x高+离左距离+离上距离
12
13        # 去除标题栏和边框 (关键步骤)
14        self.root.overrideredirect(True)
15
16        # 设置窗口透明度 (0.0 - 1.0),0.9 表示轻微透明,更有质感
17        self.root.attributes("-alpha", 0.9)
18
19        # 【重要】让窗口置顶,但不在任务栏显示 (Windows 特定)
20        # 如果需要穿透点击(鼠标点不到它),需额外设置,这里先保持可交互
21        self.root.attributes("-topmost", True)
22
23        # 设置背景色和透明色 (实现不规则形状或透明背景的关键)
24        bg_color = "#2b2b2b"  # 深灰色背景
25        text_color = "#ffffff"
26        self.root.configure(bg=bg_color)
27
28        # --- 内容区域 ---
29        self.label_time = tk.Label(
30            self.root,
31            text="",
32            font=("Arial", 16, "bold"),
33            bg=bg_color,
34            fg=text_color,
35            cursor="hand2"  # 鼠标放上去变成手型
36        )
37        self.label_time.pack(expand=True, fill="both")
38
39        # 绑定鼠标事件以实现拖拽
40        self.label_time.bind("<ButtonPress-1>", self.start_move)
41        self.label_time.bind("<B1-Motion>", self.on_move)
42
43        # 双击关闭
44        self.label_time.bind("<Double-Button-1>", lambda e: self.root.destroy())
45
46        # 启动更新循环
47        self.update_time()
48
49        # 启动主循环
50        self.root.mainloop()
51
52    def start_move(self, event):
53        """记录鼠标按下时的位置"""
54        self.x = event.x
55        self.y = event.y
56
57    def on_move(self, event):
58        """计算移动距离并移动窗口"""
59        deltax = event.x - self.x
60        deltay = event.y - self.y
61        x = self.root.winfo_x() + deltax
62        y = self.root.winfo_y() + deltay
63        self.root.geometry(f"+{x}+{y}")
64
65    def update_time(self):
66        """每秒更新时间"""
67        now = datetime.now().strftime("%H:%M:%S")
68        date = datetime.now().strftime("%m-%d")
69        self.label_time.config(text=f"{date}\n{now}")
70        # 1000毫秒后再次调用自己
71        self.root.after(1000, self.update_time)
72
73
74if __name__ == "__main__":
75    try:
76        app = DesktopWidget()
77    except KeyboardInterrupt:
78        pass
79

3、安装依赖,命令为:

1pip install pyinstaller
2

4、准备图标
阿里巴巴矢量图标库下载一个图片,在通过在线工具转为icon格式,命令为my_icon.ico,并放到项目里。
5、执行安装命令

1pyinstaller --onefile --windowed --icon=my_icon.ico desktop_widget.py
2

这样dist文件夹下会生成ext文件,进入到该目录,发送到桌面快捷方式,点击该快捷方式,桌面出现时间控件。


pycharm创建桌面时间控件小程序》 是转载文章,点击查看原文


相关推荐


Vue3开发 First Internship
午安~婉2026/3/6

#记录在2025.12-2026.3,从一个Vue新手到能独立开发项目的成长历程,包含大量实战中遇到的问题和解决方案。第一段实习总结。 #时间:2026.3.3 目录 一.项目环境与工具 二.Git版本控制实战 三.Vue3核心知识 四、路由与状态管理 五、CSS与布局技巧 六、性能优化 七、移动端开发 八、调试与部署 九、开发工具与插件 十、常见问题与解决方案 一.项目环境与工具 1.1 开发模式与生产模式的区别 开发流程:pnpm run dev→ vite


【分布式组件雪花ID】
老友記2026/2/26

分布式组件雪花ID 组成时钟回拨解决方案汇总方案一:等待后重试(阻塞等待)方案二:预留回拨位(占用序列号位)1. "预留回拨位"的核心思想2. 位分配对比图3. 具体工作场景模拟正常情况(时间向前走):发生时钟回拨(时间从1000跳回999): 4. 这种方案的优缺点5. 位运算代码示意(Java) 方案三:采用"未生成ID最大上限"自动漂移方案四:外部存储兜底(依赖Redis/ZooKeeper) 组成 雪花ID(Snowflake ID)的生成规则,核心


Linux camera驱动开发(真正需要做的linux驱动开发)
嵌入式-老费2026/2/18

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         很多的soc厂家,在发布sdk的时候,就提供了很多的芯片驱动。这里面有推荐的ddr、norflash、nandflash、emmc、sdio wifi、eth phy、触摸芯片等等。如果不是特殊的需求,基本上使用厂家推荐的芯片、模块,就可以做功能开发了。但是还有一些场景,是需要自己去主动适配驱动的,尤其是增加功能和降低成本的时候。 1、国产芯片适配      


OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
iDao技术魔方2026/2/9

一句话简介:178k stars 的开源项目 OpenClaw,用一套 Gateway 架构同时接入了 WhatsApp、Telegram、Slack、Discord 等 12+ 通讯频道,还实现了 Canvas 可视化、全时语音、浏览器控制等高级功能。这篇文章将深度拆解它的架构设计,告诉你一个「个人 AI 助手」应该如何构建。 📋 目录 背景:为什么需要个人AI助手? 项目概览:178k stars的OpenClaw 核心架构:Gateway WebSocket控制平面 多频道接入:1


墨梅博客 1.3.0 发布与服务器数据备份教训 | 2026 年第 5 周草梅周报
草梅友仁2026/2/1

本文在 草梅友仁的博客 发布和更新,并在多个平台同步发布。如有更新,以博客上的版本为准。您也可以通过文末的 原文链接 查看最新版本。 前言 欢迎来到草梅周报!这是一个由草梅友仁基于 AI 整理的周报,旨在为您提供最新的博客更新、GitHub 动态、个人动态和其他周刊文章推荐等内容。 开源动态 本周依旧在开发 墨梅 (Momei) 中。 您可以前往 Demo 站试用:demo.momei.app/ 您可以通过邮箱 admin@example.com,密码momei123456登录演示用管理


RPC分布式通信(3)--RPC基础框架接口
陌路202026/1/22

一、MprpcApplication 核心职责 MprpcApplication是 RPC 框架的 “管家”,核心作用: 单例模式:全局唯一实例,避免重复初始化; 配置加载:解析 RPC 框架的配置文件(如服务器 IP、端口、日志路径、注册中心地址等); 框架初始化:启动时初始化日志、网络、注册中心等核心组件; 全局参数访问:提供接口获取配置参数(如获取服务器端口、注册中心地址); 框架销毁:程序退出时释放资源。 二、MprpcApplication 核心接


【计算机网络 | 第三篇】MAC地址与IP地址
YYYing.2026/1/14

目录 MAC地址 一、MAC地址的格式特征 二、MAC地址的获取 三、什么是ARP? 四、ARP缓存 五、RARP IP地址 一、为什么要有IP地址? 二、既然IP地址存在,那它的意义是什么? 三、那又如何表示呢? 1、IP地址的定义 2、IPv4地址的表示方法 2.1、IPv4地址的分类编址方法 2.2、IPv4地址的划分子网编址方法 2.2.1、为什么要划分子网? 2.2.2、怎么划分子网? 2.2.3、总结 2.3、IPv4地址的无分类编址方法 3、构


Rust 的 `PhantomData`:零成本把“语义信息”交给编译器
Pomelo_刘金2026/1/5

在写底层 Rust(尤其是 unsafe / 裸指针 / FFI)时,你会遇到一种常见矛盾: 运行时:你手里可能只有一个 *const T / *mut T / *mut c_void(比如外部库返回的句柄),结构体里并没有真正存放某个引用或某个类型的值。 编译期:你又希望编译器知道“我这个类型和某个生命周期/类型绑定”,从而帮你做借用检查、推导 Send/Sync、避免错误混用等。 std::marker::PhantomData<T> 就是为了解决这个问题而存在的工具。官方文档的核心定义


前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
月亮有石头2025/12/28

很多前端开发者已经在“使用 AI”: 会问问题、会让 AI 写代码、甚至在 IDE 里和 AI 对话。 但如果这些使用方式 无法稳定地产出可运行、可验证、可回归的工程结果, 那么严格来说——其实还没有真正入门。 这篇文章想系统回答一个问题: 前端开发者“使用 AI”的能力,是有明确层级和分水岭的。 不是工具多不多,也不是模型新不新, 而是:你用 AI 的方式,决定了它在你工程体系里的角色。 把 AI 放进工程链路,用工程约束对抗幻觉,用验证与反馈逼近真实。 AI 工程化的本质,并不是让模型


Node.js 编程实战:文件读写操作
程序员爱钓鱼2025/12/19

在后端开发中,文件读写是非常常见的需求,例如日志记录、配置文件管理、上传文件处理以及数据导入导出等。Node.js 提供了内置的 fs(File System)模块,使得我们可以高效地与文件系统进行交互。理解并掌握 Node.js 的文件读写方式,是每一个 Node.js 开发者的必备基础。 一、fs 模块简介 fs 模块是 Node.js 的核心模块之一,无需额外安装即可直接使用。它提供了同步和异步两套 API,用于完成文件的创建、读取、写入、删除以及目录操作等功能。 在实际开发中,Nod

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客