nach Zeitdelay bestimmtes Feld fokussieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

Hallo,
ich habe mal die "Kernelemente" aus meinem Programm herausgegriffen.
Das Programm läuft zwar, aber ich sehe eine Ungereimtheit:
Funktion Taste "Muster prüfen"

....Funktion gui ()

....Funktion Taste "neues Wort eingeben"

....root

.... ... frames
.... ... felder
.... ... tasten

....root.mainloop()

if __name__ == "__main__": gui()
Also die eine Tastenfunktion steht als erstes vor der gui Funktion.
Die andere gruppiert innerhalb der gui.
In welcher Reihenfolge sollte ich die Blöcke logisch plazieren?
Abgesehen von nicht systemgerechtem Aufbau; könnten es auch Ablaufprobleme geben?

Zur Dokumentation meiner zweiten Frage, hänge ich Auszüge einiger Programmmodule an.

Die Taste "Muster prüfen" ist die Hauptfunktion. Es werden Eingabemuster auf Übereinstimmung in einem Wörterbuch verglichen.
Bei fehlenden Wörtern im Wörterbuch möchte ich mir in einer separaten Datei einen Hinweis merken (z.B. "Prüf, ..en, ..t, Prüfung").
Dafür drücke ich die Taste "neues Wort eingeben".
Es wäre nun aber praktisch, wenn das Programm nach der Worteingabe noch ca. 10 Sekunden im Eingabefeld stehen bliebe, für den Fall dass noch ein weiteres Wort eingegeben werden soll. Und nach der Zeitdauer wieder die erste Taste bzw. das erste Feld "Muster prüfen" fokussiert wird.

Da würde ich mich über einen Tipp freuen, wie und wo ich das bewerkstellige.
Grüße, Klaus

Hier mein Programmauszug:
----------------------------------------------

Code: Alles auswählen

# Eingegebenes Muster prüfen
def must_prf (eing_muster, ausg_muster, feld_ag_must,
              treffer, zeitdauer, eing_anz, letztes_muster):


def gui (ausgabe = '""):


    # neues Wort eingeben
    def tast_neu_wort (eg_neu_wort, ag_neu_wort, letztes_wort, feld_ag_neu_wort):
    

    root = tk.Tk()

    frame_left = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3)
    frame_left.grid(column=0, row=0)

    frame_mid = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3 )
    frame_mid.grid(column=1, row=0)

    frame_right = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3)
    frame_right.grid(column=2, row=0)


    global scrollbar; scrollbar = tk.Scrollbar(frame_left)
    ausg_lst = Listbox(frame_left, yscrollcommand = scrollbar.set,
                       width = 15, height = 22, font = ('arial', 13))

    scrollbar.config(command=ausg_lst.yview)
    
    ausg_lst.grid(column=0, row =0, padx=5)
    scrollbar.grid(column=1, row =0, padx=5, sticky='ns')


    feld_eg_must = tk.Entry(frame_mid, width=15, bd=5, relief="ridge", font=('arial', 20), 
                         textvariable = eing_muster, bg='white')
    feld_eg_must.grid(column=1, row=1, pady=5)


    feld_eg_neu_wort = tk.Entry(frame_right, width=20, bd=5, relief="ridge", font=('arial', 13), 
                         text=ausgabe, textvariable = eg_neu_wort, bg='white')
    feld_eg_neu_wort.grid(column=1, row=3, pady=5)

   
    taste_prf = tk.Button(frame_mid, width = 22, bd=5, font=('arial', 17),
                       command = partial(must_prf, eing_muster, ausg_muster, feld_ag_must,
                                         treffer, zeitdauer, eing_anz, letztes_muster), bg="papaya whip",
                                         text = "Muster prüfen")
    taste_prf.grid(column=1, row=2, pady=5, padx=8)


    taste_neu_wort = tk.Button(frame_right, width = 15,text="Ergänzen",
                           font=('arial', 13), 
                           command = partial(tast_neu_wort, eg_neu_wort, ag_neu_wort,
                                             letztes_wort, feld_ag_neu_wort), bg="old lace")
    taste_neu_wort.grid (column=1, row=5, pady=5, padx=10)

    
    
    root.mainloop()

   
if __name__ == "__main__":
    gui()
    
Zuletzt geändert von KlausP am Donnerstag 7. Januar 2021, 16:36, insgesamt 1-mal geändert.
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

habe einen Fehler gemacht - die Blanks für die Einrückungen sind verschwunden.
Werde gleich nochmal versuchen den Programmauszug als Code einzubetten.
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

Code: Alles auswählen

# Eingegebenes Muster prüfen
def must_prf (eing_muster, ausg_muster, feld_ag_must,
              treffer, zeitdauer, eing_anz, letztes_muster):


def gui(ausgabe = ''):


    # neues Wort eingeben
    def tast_neu_wort (eg_neu_wort, ag_neu_wort, letztes_wort, feld_ag_neu_wort):
    

    root = tk.Tk()

    frame_left = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3)
    frame_left.grid(column=0, row=0)

    frame_mid = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3 )
    frame_mid.grid(column=1, row=0)

    frame_right = tk.Frame(rahmen, width=w/3, height =h, relief="ridge", borderwidth=3)
    frame_right.grid(column=2, row=0)

    global scrollbar; scrollbar = tk.Scrollbar(frame_left)
    ausg_lst = Listbox(frame_left, yscrollcommand = scrollbar.set,
                       width = 15, height = 22, font = ('arial', 13))

    scrollbar.config(command=ausg_lst.yview)
    
    ausg_lst.grid(column=0, row =0, padx=5)
    scrollbar.grid(column=1, row =0, padx=5, sticky='ns')


    feld_eg_must = tk.Entry(frame_mid, width=15, bd=5, relief="ridge", font=('arial', 20), 
                         textvariable = eing_muster, bg='white')
    feld_eg_must.grid(column=1, row=1, pady=5)


    feld_eg_neu_wort = tk.Entry(frame_right, width=20, bd=5, relief="ridge", font=('arial', 13), 
                         text=ausgabe, textvariable = eg_neu_wort, bg='white')
    feld_eg_neu_wort.grid(column=1, row=3, pady=5)

   
    taste_prf = tk.Button(frame_mid, width = 22, bd=5, font=('arial', 17),
                       command = partial(must_prf, eing_muster, ausg_muster, feld_ag_must,
                                         treffer, zeitdauer, eing_anz, letztes_muster), bg="papaya whip",
                                         text = "Muster prüfen")
    taste_prf.grid(column=1, row=2, pady=5, padx=8)



    taste_neu_wort = tk.Button(frame_right, width = 15,text="Ergänzen",
                           font=('arial', 13), 
                           command = partial(tast_neu_wort, eg_neu_wort, ag_neu_wort,
                                             letztes_wort, feld_ag_neu_wort), bg="old lace")
    taste_neu_wort.grid (column=1, row=5, pady=5, padx=10)

    
    
    root.mainloop()

   
if __name__ == "__main__":
    gui()
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast einige Funktionen ohne Funktionsblock, das sind Syntaxfehler.
Vergiss gleich wieder dass es `global` oder ; gibt. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Und pro Zeile nur eine Anweisung.

Benutze keine Abkürzungen, was ist der Unterschied zwischen eg_neu_wort und ag_neu_wort?

Um etwas zeitgesteuert zu machen, gibt es `after`.
KlausP
User
Beiträge: 60
Registriert: Mittwoch 8. Juli 2020, 17:00

Achtung: ich habe nicht das Programm gelistet, sondern nur Teile davon.
z.B. nur die erste(n) Übergabezeile(n), z.B. bei def muster_prf und def gui()

Mit global meinst du die scrollbar - Diese war insgesamt sehr aufsässig; ich war überhaupt froh, als sie endlich funktionierte.
Sehe ich mir nochmal an

eg_neu_wort
Dient der Eingabe; und wird nach drücken der Taste auf "" gesetzt.
Wenn die Taste nicht richtig gedrückt wurde, wurde das Wort nicht erfasst (und vermutlich im Feld nicht gelöscht)

ag_neu_wort
Wenn das Wort in die Datei übernommen wurde, erscheint hier "Wort >>> 'pipapo' wurde erfasst", und die Meldung bleibt stehen.
Somit wird ein Wort nicht aus Versehen zweimal erfasst
Antworten