Dynamische Entry Widgets
Verfasst: Dienstag 18. August 2020, 18:31
Guten Abend,
für das folgende Problem finde ich einfach keine Lösung. Gegeben ist eine Tkinter-Anwendung mit 4 Entry-Widgets a,b,c,d, die folgende Bedingungen erfüllen muss:
1) In a dürfen nur Zahlen eingegeben werden und es dürfen nicht mehr als 4 Ziffern sein
2) Wenn a leer ist, kann in c keine Eingabe gemacht werden. Der Inhalt von c und d ist derselbe wie in b.
3) Wenn a nicht leer ist, kann in c eine Eingabe gemacht werden. Der Inhalt von c und d ist derselbe. Sie sind also nicht mehr mit b verknüpft.
Die derzeitige Lösung funktioniert nur teilweise. Sie ist in der Lage, die Einträge b und c zu verknüpfen und die Verknüpfung wieder zu lösen. Ich weiß jedoch nicht, wie man die 3) Bedingung implementieren soll. Hat jemand von euch eine Idee?
für das folgende Problem finde ich einfach keine Lösung. Gegeben ist eine Tkinter-Anwendung mit 4 Entry-Widgets a,b,c,d, die folgende Bedingungen erfüllen muss:
1) In a dürfen nur Zahlen eingegeben werden und es dürfen nicht mehr als 4 Ziffern sein
2) Wenn a leer ist, kann in c keine Eingabe gemacht werden. Der Inhalt von c und d ist derselbe wie in b.
3) Wenn a nicht leer ist, kann in c eine Eingabe gemacht werden. Der Inhalt von c und d ist derselbe. Sie sind also nicht mehr mit b verknüpft.
Die derzeitige Lösung funktioniert nur teilweise. Sie ist in der Lage, die Einträge b und c zu verknüpfen und die Verknüpfung wieder zu lösen. Ich weiß jedoch nicht, wie man die 3) Bedingung implementieren soll. Hat jemand von euch eine Idee?
Code: Alles auswählen
from tkinter import *
root = Tk()
root.geometry("200x200")
def only_numeric_input(P):
if len(P) > 0 and P.isdigit():
# enable entry_c and unlink its content from entry_b
entry_c.config(textvariable=var_b, state='normal')
else:
# disable entry_c and link its content with entry_b
entry_c.config(textvariable=var_b, state='disabled')
if len(P) > 4:
return False
# checks if entry's value is an integer or empty and returns an appropriate boolean
if P.isdigit() or P == "": # if a digit was entered or nothing was entered
return True
return False
callback = root.register(only_numeric_input) # registers a Tcl to Python callback
var_b = StringVar()
var_c = StringVar()
Label(root, text="a").grid(row = 0, column = 0, pady = (10,0))
Label(root, text="b").grid(row = 1, column = 0)
Label(root, text="c").grid(row = 2, column = 0)
Label(root, text="d").grid(row = 3, column = 0, pady = (40,0))
entry_a = Entry(root)
entry_b = Entry(root, textvariable = var_b)
entry_c = Entry(root, textvariable = var_b, state = "disabled")
entry_d = Entry(root, textvariable = var_b)
#display entrys
entry_a.grid(row = 0, column = 1)
entry_b.grid(row = 1, column = 1)
entry_c.grid(row = 2, column = 1)
entry_d.grid(row = 3, column = 1, pady = (40,0))
entry_a.configure(validate="key", validatecommand=(callback, "%P")) # enables validation
mainloop()