Goal Bei der ersten Verwendung von Pythons tkinter habe ich ein Programm erstellt, das englische Wörter in der angegebenen Reihenfolge anzeigt, und es daher aufgezeichnet.
Eine Bibliothek zum Generieren von GUI-Teilen usw. mit Python. Kann mit Homebrew installiert werden.
brew install tcl-tk
Wenn Sie pyenv verwenden, müssen Sie möglicherweise die Python-Version, die Sie verwenden möchten, deinstallieren-> neu installieren, nachdem Sie die oben genannten Schritte ausgeführt haben. Andernfalls habe ich nicht gearbeitet.
Wenn Sie im Internet suchen, finden Sie häufig Beispiele für die Implementierung von Count-up-Timern.
Dies wird realisiert, indem die Nummer innerhalb des angegebenen Etiketts (Zeichen oder Bereichsteil, der angezeigt werden soll) jede Sekunde geändert wird. In etwa sollten die folgenden Algorithmen und Funktionen verwendet werden.
class Timer
def __init__(self):
-Initialisierung der zu zählenden Variablen
-Generieren Sie eine Beschriftung, um die Nummer des Timers anzuzeigen
def count_up(label):
-Zeigen Sie den Wert der Variablen an, die auf dem Etikett gezählt werden soll
-Zählinkrement
-1 Sekunde später zählen_up()Rufen Sie eine Funktion auf(Rekursiv) ---(*)
window = tkinter.Tk() #Fenstergenerierung
count_up_timer = Timer(window)
window.mainloop()
Verwenden Sie bei (*) die after () -Methode von tkinter. Rufen Sie die angegebene Funktion nach der angegebenen Zeit mit dem Namen auf, wie er ist.
Im Folgenden wird das Wort anstelle der Nummer angezeigt oder die Anzeige an einer bestimmten Stelle gestoppt.
Der Grund, warum ich dies als Implementierungsthema gewählt habe, ist, dass ich eine Lese-App namens "Spritz" verwendet habe. Diese App liest englische Sätze auf der Webseite und zeigt sie Wort für Wort wie eine Flash-Berechnung an.
Klicken Sie hier für Spritz Aus dem Forschungsergebnis geht hervor, dass ein beträchtlicher Teil der zum Lesen eines Satzes erforderlichen Zeit für die Bewegung des Standpunkts aufgewendet wird. Es scheint, dass die Wörter an einer Stelle in der richtigen Reihenfolge angezeigt werden.
Kurz gesagt, ich habe diese Fälschung mit tkiner implementiert. (Die Hauptfamilie hat viele wissenschaftliche Ideen, wie zum Beispiel einen Buchstaben jedes Wortes rot zu machen, um die Übereinstimmung mit dem Standpunkt zu erleichtern.) Nun, es kann eine gute Praxis sein, die Neustartfunktion zu implementieren.
Ich habe die Funktion zum Lesen des Textes auf der Webseite aufgegeben und werde den Text in das Textfeld kopieren. Die Benutzeroberfläche sieht so aus.
Wenn Sie die Start-Taste drücken,
Die Wörter im Satz im obigen Textfeld werden einzeln unter der Schaltfläche angezeigt. (Im Bild wird "Totoro" angezeigt.)
Code unten
# import tkinter
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
import time
class Flash:
def __init__(self, parent, wpm, words_list, label):
# variable storing time
self.count = 0
# label displaying words
self.wpm = wpm
self.words_list = words_list
# convert wpm to display interval in ms
self.wpm_interval = int(60/self.wpm * 1000)
self.label = label
# self.label = tk.Label(parent, text="***", font="Arial 40", width=25)
self.label.pack()
def display_next_word(self):
# finish the loop when all words are displayed
if self.count > len(self.words_list)-1:
self.count = 0
self.label.destroy()
return
# display next word
self.label.configure(text="%s" % self.words_list[self.count])
# increment the count
self.count += 1
# let tkinter to call self.refresh after 1/wpm sec
self.label.after(self.wpm_interval, self.display_next_word)
if __name__ == "__main__":
# define a window
root = tk.Tk()
root.geometry("400x300")
# label for english sentences
label_text = tk.Label(root, text=u'sentences (copy and paste):')
label_text.pack()
# text box for english sentences
text = tk.Entry(root)
text.pack()
text.insert(tk.END, 'My Neighbor Totoro') # initial value
# label for wpm (word per minutes)
label_wpm = tk.Label(root, text=u'wpm \n (how many words you read/understand in 1 minutes):')
label_wpm.pack()
# text box for wpm
wpm_box = tk.Entry(root)
wpm_box.pack()
wpm_box.insert(tk.END, '250')
def start_flash():
# prepare label for displayin words one by one
label_flash_words = tk.Label(root, text="***", font="Arial 40", width=25)
# prepare sentences and wpm values
target_text = text.get()
print("the number of words : ", len(target_text.split()))
wpm_int = int(wpm_box.get())
# start flashing
flash = Flash(root, wpm = wpm_int, words_list = target_text.split(), label=label_flash_words)
flash.display_next_word()
start_btn = tk.Button(root, text='start', command=start_flash)
start_btn.pack()
root.mainloop()
Die after-Methode selbst garantiert keine hohe Zeitgenauigkeit. Wenn Sie dies wünschen, müssen Sie sie separat ändern.
Abgesehen von der Nützlichkeit des Programms selbst habe ich etwas über tkinter gelernt.
Recommended Posts