本文介绍一个我个人基于python开发的一个时间悬浮窗(时间窗)开源Windows程序,带你入门python软件开发,本文章是技术部分简单讲解。如果想查看这个项目的功能和展示,请移步这个博客。
下载程序:Github Release(建议下载到某一个文件夹内而不是桌面)
欢迎大家来使用这个小程序,也欢迎大家通过这个项目学习怎么使用python开发Windows程序,也希望大家给我的项目点点star。
简述
Python 在很多领域都可以使用,开发 Windows 桌面应用程序也不例外。Tkinter 是 Python 的标准 GUI(图形用户界面)库,它提供了创建简单桌面应用程序所需的工具。而 PyInstaller 则是一个强大的工具,可以将 Python 脚本打包成独立的可执行文件,方便在 Windows 系统上分发和运行。本文将通过一个示例代码,详细介绍如何使用 Python 和 Tkinter 开发 Windows 程序,并使用 PyInstaller 进行打包。
简单来说,就是Tkinter负责所有的交互逻辑和界面展示,Pyinstaller负责将所有的代码生成成exe文件,可以直接运行。
所有内容开始前肯定是安装依赖:
本项目使用了 `Tkinter`(Python自带)。如果你的Python版本不包含 `Tkinter`,你可以使用以下命令安装:
pip install python-tk
接下来安装 `pyinstaller`:
pip install pyinstaller
Tkinter
Tkinter的代码相对简单,因此通过一些简单的例子来讲解一些基础内容:
主窗口与顶级窗口
在 Tkinter 中,每个应用程序都有一个主窗口(Tk
对象),它是所有其他窗口和控件的父级。顶级窗口(Toplevel
)是独立于主窗口的窗口,可以用来创建额外的窗口,例如设置窗口或对话框。
在示例代码中,主窗口被隐藏(self.root.withdraw()
),而浮动时钟窗口则通过 Toplevel
创建:
self.root = tk.Tk()
self.root.withdraw()
self.floating_window = tk.Toplevel(self.root)
这种方式允许我们创建一个独立的浮动窗口,而不显示主窗口。
控件(Widgets)
Tkinter 提供了多种控件,用于构建用户界面。常见的控件包括:
-
Label(标签):用于显示文本或图片。项目中的时间显示通过
Label
实现:self.time_label = tk.Label(self.floating_window, text="", font=("Consolas", 17), bg="#000000", fg="#FFFFFF")
-
Button(按钮):用于触发事件。项目中的锁定按钮和关闭按钮都是通过
Button
创建的:self.pin_button = tk.Button(self.floating_window, text="🔓", command=self.toggle_lock)
-
Entry(输入框) 和 Combobox(下拉框):用于用户输入。项目中的设置窗口使用了
Entry
和Combobox
来让用户调整字体大小、窗口透明度等设置。 -
除此之外还有滑动条等,可以查看项目源代码查看所有的触法控件
布局管理
Tkinter 提供了多种布局管理器,用于控制控件的排列方式。常见的布局管理器包括:
-
pack:自动将控件排列到窗口中,适合简单的布局。
-
grid:基于网格的布局,适合复杂的表格式排列。
-
place:通过坐标定位控件,适合需要精确控制位置的场景。
在本项目中中,pack
被用于将时间标签填充到浮动窗口中:
self.time_label.pack(fill="both", expand=True)
而 place
则用于将按钮放置在窗口的特定位置:
self.pin_button.place(relx=0.05, rely=0.05, anchor="nw")
事件绑定
Tkinter 支持事件驱动编程,可以通过绑定事件(如鼠标点击、键盘输入)来触发回调函数。以本项目代码为例,鼠标拖动事件被绑定到窗口上,用于实现窗口的可移动性:
self.floating_window.bind("<Button-1>", self.drag_start)
self.floating_window.bind("<B1-Motion>", self.drag_move)
当用户点击并拖动窗口时,drag_start
和 drag_move
方法会被调用,从而更新窗口的位置。
主题与样式
Tkinter 的 ttk
模块提供了更现代的控件样式,支持主题和样式定制。在本项目代码中,ttk
被用于创建设置窗口中的滚动条和下拉框:
sb = ttk.Scrollbar(cf, orient="vertical", command=cv.yview)
combo_lang = ttk.Combobox(frm, values=self.available_languages, state="readonly")
Pyinstaller
Pyinstaller非常易用,以本项目为例,在终端使用以下命令创建可执行文件:
pyinstaller --onefile --noconsole --icon=images/icon.ico --name TimeWindow .\Time_Floating_Window.py
PyInstaller
参数介绍:
--onefile
:将所有文件打包成一个单独的可执行文件。--noconsole
:不显示控制台窗口(对于GUI应用很有用)。--icon
:指定应用程序图标。--name
:指定生成的可执行文件的名称。
可执行文件(.exe
)将位于 dist
文件夹内。
为项目做贡献
如果你有任何新功能的想法,或者打算提出更多功能意见,或者打算提供更多翻译语言的版本,欢迎联系作者,或者前往github提出issue或者直接提交pull request。
在代码中,翻译模块已经被独立了出来,如果你会更多的语言,你可以直接fork本项目,之后在translation.py中增加更多语言,之后提出pull request即可。
作者的其他有趣文章:
保姆级教程,完全从零搭建简单个人网站(免费,无需服务器无需域名)个人博客网站,个人简历网站模板-CSDN博客
适合初学者的Transformer介绍(通俗易懂),含pytorch代码_transformer入门介绍-CSDN博客
一个基于PVT(Pyramid Vision Transformer)的视频插帧程序(pytorch)_pvt v2处理视频-CSDN博客