Source code for UI.Widgets

import os
import sys
import inspect
import tkinter as tk
from tkinter import ttk

currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)


[docs]class DatePicker(tk.Frame): def __init__(self, master, dateSelected): tk.Frame.__init__(self, master) self.parent = master self.dateSelected = dateSelected self.create_UI() def create_UI(self): tk.Label(self, text="dd").grid(row=0, column=0, sticky="w") self.day = tk.StringVar() self.day.trace_add("write", self.on_day_change_event) self.eDay = ttk.Entry( self, width=3, textvariable=self.day, validate="focusout", validatecommand=self.set_date, ) self.eDay.grid(row=1, column=0, sticky="w") tk.Label(self, text="/").grid(row=1, column=1, sticky="w") tk.Label(self, text="mm").grid(row=0, column=2, sticky="w") self.month = tk.StringVar() self.month.trace_add("write", self.on_month_change_event) self.eMonth = ttk.Entry( self, width=3, textvariable=self.month, validate="focusout", validatecommand=self.set_date, ) self.eMonth.grid(row=1, column=2, sticky="w") tk.Label(self, text="/").grid(row=1, column=3, sticky="w") tk.Label(self, text="yyyy").grid(row=0, column=4, sticky="w") self.year = tk.StringVar() self.year.trace_add("write", self.on_year_change_event) self.eYear = ttk.Entry( self, width=5, textvariable=self.year, validate="focusout", validatecommand=self.set_date, ) self.eYear.grid(row=1, column=4, sticky="w") def set_date(self): self.dateSelected.set( self.build_date(self.day.get(), self.month.get(), self.year.get()) ) def build_date(self, day, month, year): return "{0}/{1}/{2}".format(day, month, year) def on_day_change_event(self, *args): value = self.day.get() if len(value) > 2: self.day.set(value[:2]) elif len(value) == 2: self.eMonth.focus_set() self.set_date() def on_month_change_event(self, *args): value = self.month.get() if len(value) > 2: self.month.set(value[:2]) elif len(value) == 2: self.eYear.focus_set() self.set_date() def on_year_change_event(self, *args): value = self.year.get() if len(value) > 4: self.year.set(value[:4]) self.set_date()
[docs] def focus_set(self): tk.Frame.focus_set(self) self.eDay.focus_set()