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()