我必须在我的个人机器上安装Ubuntu,并花一些时间进行技巧。我了解了Pomodoro技术以更好的时间管理,并意识到需要Ubuntu的应用程序,因为没有一个应用程序提供我想要的功能。
因此,该项目启动了,其alpha版本中的完整组件在这里:https://abpanic.github.io/PomodoroTimer/
在这篇博客文章中,我将讨论为我的用例创建的自定义Pomodoro计时器的构建过程。让我们研究细节。
构建过程
安装先决条件
Visual Studio代码
我首先在Visual Studio代码中使用文件名“ Pomodorotimer.py”创建一个新文件,并添加了初始脚手架以概述应用程序的主要组件。起动代码看起来像这样:
import tkinter as tk
class PomodoroTimer:
def __init__(self, master):
self.master = master
master.title("Pomodoro Timer")
# Create timer label
self.timer_label = tk.Label(master, text="00:00", font=("Arial", 48))
self.timer_label.pack(pady=50)
# Create timer control buttons
self.start_button = tk.Button(master, text="Start", command=self.start_timer)
self.start_button.pack(side="left", padx=10)
self.pause_button = tk.Button(master, text="Pause", command=self.pause_timer, state="disabled")
self.pause_button.pack(side="left", padx=10)
self.stop_button = tk.Button(master, text="Stop", command=self.stop_timer, state="disabled")
self.stop_button.pack(side="left", padx=10)
def start_timer(self):
pass
def pause_timer(self):
pass
def stop_timer(self):
pass
root = tk.Tk()
app = PomodoroTimer(root)
root.mainloop()
启动器代码只是应用程序的脚手架,可以在第一个GO中使用所有功能编码的所有组件。但是,在VSCODE中运行启动代码应该启动该应用程序,因为我们开始启动,并且应该像以前一样启动。
。接下来,我添加了其余的代码组件,以确保应用程序功能正常并执行应有的任务。如您所见,暂停和停止计时器功能缺少,应用程序的计时器和状态也是如此。我们还添加了倒计时和计时器标签
import tkinter as tk
class PomodoroTimer:
def __init__(self, master):
...//code here remains the same
master.title("Pomodoro Timer")
self.seconds_left = 25 * 60 # 25 minutes
self.is_running = False
...//code here remains the same
def countdown(self):
if self.seconds_left > 0 and self.is_running:
self.seconds_left -= 1
self.update_timer_label()
self.master.after(1000, self.countdown) # Call this method again after 1000 ms (1 second)
def update_timer_label(self):
minutes, seconds = divmod(self.seconds_left, 60)
self.timer_label.configure(text=f"{minutes:02d}:{seconds:02d}")
def start_timer(self):
if not self.is_running:
self.is_running = True
self.start_button.config(state="disabled")
self.pause_button.config(state="normal")
self.stop_button.config(state="normal")
self.countdown()
def pause_timer(self):
if self.is_running:
self.is_running = False
self.start_button.config(state="normal")
self.pause_button.config(state="disabled")
def stop_timer(self):
if self.is_running or self.seconds_left != 25 * 60:
self.is_running = False
self.seconds_left = 25 * 60
self.update_timer_label()
self.start_button.config(state="normal")
self.pause_button.config(state="disabled")
self.stop_button.config(state="disabled")
if __name__ == "__main__":
root = tk.Tk()
...//code here remains the same
现在,应用程序的出现很好,我们可以使用python3 PomodoroTimer.py
从终端运行。
应用程序启动,计时器启动。但是,最低可行产品(MVP)应具有超出基本功能的功能。它应该在初始阶段中包含使用户想要更多使用的功能。
因此,我专注于两个独特功能,将其与Ubuntu Snap Store中可用的其他Pomodoro计时器区分开来:
- 用户可以听到的警报声音,允许他们重置计时器。
- 可以双击Ubuntu启动应用程序的能力。
要实现这些功能,我进行了以下更改:
添加警报声音
我使用pygame
库来添加警报声音功能:
import tkinter as tk
import pygame
class PomodoroTimer:
def __init__(self, master):
...//code here remains the same
pygame.mixer.init()
def countdown(self):
if self.seconds_left > 0 and self.is_running:
...//code here remains the same
self.master.after(1000, self.countdown) # Call this method again after 1000 ms (1 second)
elif self.is_running:
self.play_alarm()
...//code here remains the same
def stop_timer(self):
if self.is_running or self.seconds_left != 25 * 60:
...//code here remains the same
self.pause_button.config(state="disabled")
self.stop_button.config(state="disabled")
def play_alarm(self):
pygame.mixer.music.load("alarm_sound.wav") # Replace "alarm_sound.wav" with the path to your sound file
pygame.mixer.music.play()
if __name__ == "__main__":
root = tk.Tk()
app = PomodoroTimer(root)
root.mainloop()
通过双击Ubuntu使应用程序可执行
用双击Ubuntu使Python脚本可执行,我遵循以下步骤:
- 在脚本中添加Shebang行。 在文本编辑器中打开您的python脚本(pomodorotimer.py),然后将以下行添加到文件的顶部:
#!/usr/bin/env python3
此行告诉操作系统使用Python 3运行脚本。
保存并关闭文件。
- 使脚本可执行。 打开一个终端窗口并导航到脚本所在的目录。然后,运行以下命令:
chmod +x PomodoroTimer.py
此命令授予脚本可执行的权限。
-
将脚本与python解释器相关联。
为了确保双击时使用Python打开脚本,您需要将.py文件与Python解释器相关联。为此,请按照以下步骤:
A。右键单击pomodrotimer.py文件,然后从上下文菜单中选择“属性”。
b。在“属性”窗口中,导航到“打开”选项卡。
C。在应用程序列表中找到“ Python 3”解释器。如果您看不到它,请单击“显示其他应用程序”并在扩展列表中找到它。
d。选择“ Python 3”,然后单击“设置为默认”按钮。
双击脚本:现在您应该可以双击pomodorotimer.py文件以运行脚本。
-
(可选)创建桌面快捷方式。
右键单击桌面上,然后选择“在此处创建新的启动器”或“创建启动器”(措辞可能会根据您的Ubuntu版本而有所不同)。
在“创建启动器”窗口中,填写详细信息:
A。类型:从下拉菜单中选择“应用程序”。
b。名称:输入快捷方式的名称,例如“ Pomodoro Timer”。
C。命令:单击“浏览”按钮,然后导航到pomodorotimer.py文件的位置。选择文件,然后单击“打开”。
d。 (可选)图标:单击图标占位符以选择快捷方式的图标。
单击“确定”或“创建”以创建桌面快捷方式。
使用这些增强功能,现在是时候创建PILOT应用程序的分发版本了。
要将python脚本转换为debian软件包(.deb文件),我遵循以下步骤:
- 安装所需工具。 打开终端并运行以下命令以安装必要的工具:
sudo apt update
sudo apt install dh-python devscripts debhelper
- 为软件包创建目录结构。 用软件包的名称替换your_package_name,然后运行以下命令:
mkdir -p your_package_name/usr/src/your_package_name
mkdir -p your_package_name/usr/bin
mkdir -p your_package_name/debian
然后,将您的python脚本(pomodorotimer.py)移动到your_package_name/usr/src/your_package_name目录。
- 创建一个运行应用程序的脚本。 在your_package_name/usr/bin目录中,创建一个名为your_package_name的新文件(没有任何文件扩展名)。在此文件中,添加以下内容:
#!/bin/sh
/usr/bin/python3 /usr/src/your_package_name/PomodoroTimer.py
保存文件并通过运行:
使其可执行
chmod +x your_package_name/usr/bin/your_package_name
- 创建一个
debian/control
文件。 在your_package_name/debian目录中,创建一个名为Control的新文件。将以下内容添加到文件中,用您的包装详细信息替换占位符文本:
Source: your_package_name
Section: utils
Priority: optional
Maintainer: Your Name <your.email@example.com>
Build-Depends: debhelper (>=9), dh-python, python3
Standards-Version: 3.9.8
Package: your_package_name
Architecture: all
Pre-Depends: dpkg (>= 1.16.1), python3
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}
Description: Short description of your package
Long description of your package.
- 创建一个
debian/rules
文件。 在your_package_name/debian目录中,创建一个名为“规则”的新文件。将以下内容添加到文件:
#!/usr/bin/make -f
%:
dh $@ --with python3 --buildsystem=pybuild --system=setuptools
保存文件并通过运行:
使其可执行
chmod +x your_package_name/debian/rules
- 创建一个
debian/changelog
文件。 将以下内容添加到文件中,用您的包装详细信息替换占位符文本:
your_package_name (1.0-1) unstable; urgency=low
* Initial release.
-- Your Name <your.email@example.com> <current_date>
用格式替换为MON,DD MMM YYYY HH:MM:SS +ZZZZ。
- 创建
setup.py
文件。 在项目的根目录中创建一个setup.py文件,其中包含以下内容:
from setuptools import setup, find_packages
setup(
name="pomodorotimer",
version="1.0",
packages=find_packages(),
entry_points={
'console_scripts': [
'pomodorotimer=pomodorotimer:main',
],
},
)
替换Pomodorotimer:Main用适当的模块和应用程序输入点的功能名称。
- 创建一个
debian/compat
文件。 创建一个新的文件,其中包括以下内容的Debian目录中的Compat:
10
这将兼容性级别设置为10,它应该与您使用的工具一起使用。
- 构建Debian软件包。 导航到终端中的your_package_name目录的根,并运行以下命令:
dpkg-buildpackage -us -uc
如果构建成功,则将在您的your_package_name文件夹的父目录中生成.deb文件。
现在,我有一个.deb文件,可以使用dpkg -i your_package_name.deb
命令在基于debian的系统上分发和安装。