After: Wo hakt es?
Verfasst: Samstag 22. Mai 2021, 13:38
Hallo liebes Forum,
ich möchte ein kleines Tkinter-Programm schreiben, das mir Eingabefelder automatisch mit Inhalten aus der Zwischenablage in einer vorgegebenen Reihenfolge füllt. Möchte mir damit die Datenerfassung vereinfachen, da ich mir nach Strg+C das manuelle Navigieren ins Eingabefeld und dortige Einfügen spare. So sieht mein bisheriger Ansatz aus:
An sich scheint das auch zu funktionieren, aber nur sehr unregelmäßig. Das Programm soll alle 250 ms nachsehen, ob was Neues in der Zwischenablage liegt. Wenn ich das Programm ausführe klappt das manchmal direkt, manchmal dauert es mehrere Sekunden, bis der Inhalt eingefügt wird. Fehlermeldungen werden keine ausgegeben. Wo könnte das Problem liegen? Kommen sich mehrfache Aufrufe von after vielleicht in irgendwie in die Quere?
ich möchte ein kleines Tkinter-Programm schreiben, das mir Eingabefelder automatisch mit Inhalten aus der Zwischenablage in einer vorgegebenen Reihenfolge füllt. Möchte mir damit die Datenerfassung vereinfachen, da ich mir nach Strg+C das manuelle Navigieren ins Eingabefeld und dortige Einfügen spare. So sieht mein bisheriger Ansatz aus:
Code: Alles auswählen
import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.current_entry = 0
self.max_entries = 3
self.clipboard_clear()
self.clipboard_append("")
for n in range(self.max_entries):
ClipboardEntry(self, index=n).pack(side=tk.TOP)
class ClipboardEntry(tk.Entry):
def __init__(self, parent, index, *args, **kwargs):
tk.Entry.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.index = index
self.entry_var = tk.StringVar()
self.entry_var.set("")
self["textvariable"] = self.entry_var
self.refresh_entry()
def refresh_entry(self):
if (
self.entry_var.get() == ""
and self.clipboard_get() != ""
and self.parent.current_entry == self.index
):
self.entry_var.set(self.clipboard_get())
self.clipboard_clear()
self.clipboard_append("")
self.parent.current_entry += 1
self.after(250, self.refresh_entry)
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack()
root.mainloop()