Apr-05-2022, 06:12 AM
(This post was last modified: Apr-05-2022, 06:12 AM by deanhystad.)
Modify get_fields to do the checking.
def get_fields(msg, title, fields): """Get values for multiple fields. Returns values in dictionry""" values = easygui.multenterbox(msg, title, fields) # Validate field values while True: missing_fields = [field for field, value in zip(fields, values) if not value.strip()] invalid_values = [] for field, value in zip(fields, values): try: value = int(value) if not VALUE_MIN <= value <= VALUE_MAX: invalid_values.append(field) # Not in range except ValueError: invalid_values.append(field) # Not a number if missing_fields: missing_fields = ", ".join(missing_fields) values = easygui.multenterbox(f"Enter values for {missing_fields}", title, fields, values) elif invalid_values: invalid_values = ", ".join(invalid_values) values = easygui.multenterbox(f"{invalid_values} must be in range {VALUE_MIN}..{VALUE_MAX}", title, fields, values) else: return {field:value for field, value in zip(fields, values)}If you'd rather use the validate function you would call that in the add_combo() function.
def add_combo(): '''Add new combo to menu''' while True: combo_name = easygui.enterbox( "Enter Monster Card name: ", title = "Monster Card Name").capitalize() if check_exists(combo_name): easygui.msgbox("That card name has already been used.") else: card_catalogue[combo_name] = get_fields( msg="Enter Values", title="Monster Card Value", fields=("Strength", "Speed", "Stealth", "Cunning")) for field, value in card_catalogue[combo_name].items(): validate_value(value, field) if not confirm("Do you want to add another monster card?"): break