Dieser Artikel wurde als Artikel zum 9. Tag des IS17er Adventskalenders verfasst. Klicken Sie hier für den Artikel über Tag 8.
Ich habe eine Timer-App erstellt, die vom Terminal aus mit einer Bibliothek namens Tkinter of Python gestartet werden kann. Sie können sehen, wie es funktioniert, indem Sie sich das Bild ansehen. Bitte benutzen Sie es auf jeden Fall!
Vor kurzem habe ich meine Konzentration verloren, und als ich vor meinem Computer saß, waren zwei Stunden vergangen, bevor ich es wusste. Deshalb habe ich einen Timer erstellt, der einfach vom Terminal aus gestartet werden kann, damit ich mich für kurze Zeit konzentrieren und die Zeit verwalten kann. Ich habe mich dazu entschlossen (gestern Abend).
(Als ich diesen Abschnitt schrieb, schrieb ich das Programm noch nicht)
Zum Beispiel als Image der diesmal zu erstellenden Anwendung
$ tmr 5m30s -t kadai
Das Bild ist, dass, wenn Sie einen Befehl wie diesen drücken, ein kleines Fenster in der oberen rechten Ecke des Bildschirms erscheint und herunterzählt. -t
ist optional der Titel des Timers. Selbst wenn ich eine sehr komplizierte Funktion implementiere, werde ich sie nicht verwenden, daher frage ich mich, ob dies vorerst in Ordnung ist. Ich frage mich, ob es einen optionalen Benachrichtigungston wie Slack gibt. Wenn sich die Farbe danach bei jedem Start zufällig ändert, können Sie sie verwenden, ohne sich zu langweilen.
Ich habe überhaupt keine Desktop-Anwendung geschrieben, weil es normalerweise ein Web-System ist, aber wenn ich es ein bisschen gegoogelt habe, scheint Tkinter Spaß zu machen, also habe ich dies geschrieben Ich habe mich entschieden, es zu benutzen. Es scheint, dass Sie mit Python mit Tkinter einfach eine GUI erstellen können.
Der Code bestand aus ungefähr 100 Zeilen, also fügen Sie alles ein. Aufgrund dieser Kürze habe ich es in eine Datei geschafft. Fühlen Sie sich frei, es anzupassen.
tmr.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import re
import argparse
import random
import Tkinter as tk
class App():
def __init__(self):
self.window_size = 150
self.fps = 10
self.font_size = 23
self.option = self.parse_args()
self.time = self.get_timesec()
self.period = self.time
self.root = self.set_root()
self.canvas = self.set_canvas()
self.label = self.set_label()
self.progress = self.init_progress()
self.update()
self.run()
def parse_args(self):
parser = argparse.ArgumentParser(description="Show simple countdown timer on desktop.")
parser.add_argument("period", action="store", type=str, help="Set period for your timer.")
parser.add_argument("-t", dest="title", action="store", default="Timer", help="Set title for your timer.")
parser.add_argument("-n", dest="notify", action="store_false", default=True, help="Disable notification.")
return parser.parse_args()
def get_timesec(self):
if re.search("\A(?:\d+h)?(?:\d+m)?(?:\d+s)?$", self.option.period) is None:
print "Incorrect format of period:", self.option.period
print "Set period like 10m30s"
sys.exit()
time = 0
if re.search("\d+h", self.option.period) is not None:
time += int(re.search("\d+h", self.option.period).group(0)[:-1]) * 3600
if re.search("\d+m", self.option.period) is not None:
time += int(re.search("\d+m", self.option.period).group(0)[:-1]) * 60
if re.search("\d+s", self.option.period) is not None:
time += int(re.search("\d+s", self.option.period).group(0)[:-1])
if time > 9 * 3600 + 59 * 60 + 59:
print "Too long period."
sys.exit()
return time
def set_root(self):
root = tk.Tk()
root.resizable(0,0)
window_size = self.window_size
colors = ["#f44336", "#E91E63", "#9C27B0", "#673AB7", "#3F51B5", "#2196F3", "#03A9F4", "#00BCD4", "#009688", "#4CAF50", "#8BC34A", "#CDDC39", "#FFEB3B", "#FFC107", "#FF9800", "#FF5722", "#795548", "#9E9E9E", "#607D8B"]
root.title(self.option.title)
root.geometry("%dx%d+%d+%d" % (window_size, window_size, root.winfo_screenwidth() - window_size, 0))
root.configure(bg=random.choice(colors))
root.attributes("-alpha", 0.5)
root.attributes("-topmost", True)
return root
def set_label(self):
window_size = self.window_size
label = self.canvas.create_text((window_size / 2, window_size / 2), text="")
self.canvas.itemconfig(label, font=("Menlo-Regular", self.font_size))
return label
def set_canvas(self):
window_size = self.window_size
canvas = tk.Canvas(self.root, width=window_size, height=window_size, highlightthickness=0)
canvas.grid()
return canvas
def format_time(self, timesec):
m, s = divmod(timesec, 60)
h, m = divmod(m, 60)
if h == 0:
if m == 0:
return "%02ds" % (s)
else:
return "%02dm%02ds" % (m, s)
else:
return "%dh%02dm%02ds" % (h, m, s)
def init_progress(self):
color = self.root["bg"]
window_size = self.window_size
progress = self.canvas.create_arc(window_size * 0.1, window_size * 0.1, window_size * 0.9, window_size * 0.9, style="arc", width="%d" % (window_size / 15), outline=color, start=90, extent=360)
return progress
def update(self):
window_size = self.window_size
self.canvas.itemconfig(self.label, text=self.format_time(self.time))
extent = 360.0 * self.time / self.period
self.canvas.itemconfig(self.progress, start=450-extent, extent=extent)
self.time -= 1.0 / self.fps
if self.time < 0:
if self.option.notify:
print '\a'
sys.exit()
self.root.after(1000 / self.fps, self.update)
def run(self):
self.root.mainloop()
app = App()
Ich habe es in GitHub geschrieben, aber hier darf ich es nicht klonen.
chmod 755 tmr
`export PATH = $ PATH: / Users / [Benutzername] / timer``` zu`
~ / .bash_rc oder `` ~ / .bash_profile
hinzu. Wenn Sie dies nicht verstehen, googeln Sie das Hinzufügen von PATH.`source ~ / .bash_rc``` oder`
source ~ / .bash_profile``` aus und starten Sie das Terminal neuEigentlich gibt es einige, aber vorerst gibt es einige.
Es ist ein regulärer Ausdruck, den jeder liebt.
"\A(?:\d+h)?(?:\d+m)?(?:\d+s)?$"Das ist der Anfang"\A(?:\d+h)?(?:\d+m)?(?:\d+s)?\z"Ich habe das geschrieben und None für immer in Massenproduktion hergestellt. Gewöhnen Sie sich an reguläre Ausdrücke.
#### So schreiben Sie Code präzise
Python verfügt standardmäßig über eine Vielzahl nützlicher Funktionen. Selbst wenn Sie etwas selbst schreiben möchten, sollten Sie es zuerst überprüfen. In den meisten Fällen ist es schneller, es selbst zu schreiben, aber da es eine schlechte Praxis ist, dass die Behandlung von Eckfällen problematisch ist und sich die Lesbarkeit verschlechtert, habe ich nur die vorhandenen Funktionen gegoogelt. Darüber hinaus verhalten sich im Fall von Python mehrere vorhandene Funktionen häufig gleich, sodass die Auswahl einer Bibliothek einige Zeit in Anspruch nahm, damit die vorhandenen Funktionen ein gutes Gefühl der Einheit aufweisen. Dies kann eine Berufskrankheit sein.
## schließlich
Sie können es von [GitHub](https://github.com/xuzijian629/timer) klonen. Verwenden Sie es daher (wenn Sie Probleme haben, können Sie den Code so kopieren, wie er ist). Ich bin froh zu weinen, wenn du die Hauptrolle spielst! Außerdem sind Benachrichtigungstöne usw. zum Zeitpunkt des Schreibens nicht implementiert, sodass ich sie später hinzufügen kann.
Abgesehen davon gibt es im Fall von Mac einen genialen Befehl namens "say"
```$ sleep 100 &&sag Ende```
Wenn Sie so etwas tun, wird nach 100 Sekunden "Ende" angezeigt (wenn die Sprache auf Japanisch eingestellt ist).
Na dann, bis morgen ~
[Ergänzung] Benachrichtigungston wurde implementiert (der obige Code wurde korrigiert).
```print '\a'```
Du kannst gehen! Ist es nicht ein Python-Gott ...!