Exemplo n.º 1
0
    def create_custom_time_entry(self, container_frame):
        listbox = container_frame.winfo_children(
        )[0]  # TODO: Find a better way to access this listbox than simply quoting the ID.

        frame = LabelFrame(container_frame,
                           text="Custom Time Frame",
                           padx=10,
                           pady=10)

        start_label = ttk.Label(frame, text="Start Date:")
        start_label.grid(row=0, column=0, padx=10, pady=10)

        start_select = DateEntry(frame)
        start_select.grid(row=0, column=1, padx=10, pady=10)
        start_select.bind('<<DateEntrySelected>>',
                          lambda event: self.timeframe_updated(listbox))

        end_label = ttk.Label(frame, text="End Date:")
        end_label.grid(row=1, column=0, padx=10, pady=10)

        end_select = DateEntry(frame)
        end_select.grid(row=1, column=1, padx=10, pady=10)
        end_select.bind('<<DateEntrySelected>>',
                        lambda event: self.timeframe_updated(listbox))

        return frame
Exemplo n.º 2
0
class Spectral2Spectrum(ttk.LabelFrame):
    """ ttk.Frame with all the parameters required for the laser spectrum

    """

    def __init__(self, parent: ttk.Frame, row: int, update: Callable[[], None], col: int = 0) -> None:
        """

        :param parent:
        """
        super(Spectral2Spectrum, self).__init__(parent, text='Spectral2 spectrum')
        self.grid(column=col, row=row, sticky=tk.NSEW, pady=15)

        # Date and time
        self.hour = tk.IntVar(value=12)
        self.min = tk.IntVar(value=0)
        self.hour.trace_add('write', update)
        self.min.trace_add('write', update)

        date_label = ttk.Label(self, text="Date")
        time_label = ttk.Label(self, text="Time (h:m)")
        self.cal = DateEntry(self, foreground='black', year=2018, month=12, day=1)
        hour_box = ttk.Combobox(self, values=list(range(0, 24)), textvariable=self.hour, width=5)
        min_box = ttk.Combobox(self, values=list(range(0, 60)), textvariable=self.min, width=5)

        date_label.grid(column=0, row=0, sticky=tk.NSEW)
        time_label.grid(column=1, row=0, columnspan=2, sticky=tk.NSEW)
        hour_box.grid(column=1, row=1, sticky=tk.NSEW)
        hour_box.bind('<<ComboboxSelected>>', update)
        min_box.grid(column=2, row=1, sticky=tk.NSEW)
        min_box.bind('<<ComboboxSelected>>', update)
        self.cal.grid(column=0, row=1, sticky=tk.NSEW)
        self.cal.bind('<<DateEntrySelected>>', update)
Exemplo n.º 3
0
class StatisticFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.pack()

        # Db
        db = Db()

        now = datetime.now()

        # Station selectbox
        stationOptions = {}
        for station in db.getStations():
            stationOptions[station.name] = station.id
        self.stationSelect = Select(self, 'Station:', stationOptions)
        self.stationSelect.setEvent(self.updateStatistic)

        # Type selectbox
        self.statisticTypeSelect = Select(self, 'Type:', {
            'Day': 'day',
            'Month': 'month',
            'Year': 'year'
        })
        self.statisticTypeSelect.setEvent(self.updateStatistic)

        # Date from calendar
        self.dateFromSelect = DateEntry(self,
                                        selectmode='day',
                                        date_pattern='dd.mm.y')
        self.dateFromSelect.set_date(self.firstDayOfMonth(now))
        self.dateFromSelect.bind("<<DateEntrySelected>>", self.updateStatistic)
        self.dateFromSelect.pack()

        # Date to calendar
        self.dateToSelect = DateEntry(self,
                                      selectmode='day',
                                      date_pattern='dd.mm.y')
        self.dateToSelect.set_date(self.lastDayOfMonth(now))
        self.dateToSelect.bind("<<DateEntrySelected>>", self.updateStatistic)
        self.dateToSelect.pack()

        # Update statistic
        self.updateStatistic()

    def updateStatistic(self, *args):
        StatisticPrint(self, self.stationSelect.get(),
                       self.dateFromSelect.get_date(),
                       self.dateToSelect.get_date(),
                       self.statisticTypeSelect.get())

    def firstDayOfMonth(self, d):
        return d.replace(day=1, hour=0, minute=0, second=0, microsecond=0)

    def lastDayOfMonth(self, d):
        if d.month == 12:
            return d.replace(day=31)
        return d.replace(month=d.month + 1, day=1) - timedelta(days=1)
Exemplo n.º 4
0
class StatisticFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.pack()

        # Db
        db = Db()

        # Datetime now
        now = datetime.now()

        # Station selectbox
        stationOptions = {}
        for station in db.getStations():
            stationOptions[station.name] = station.id
        self.stationSelect = Select(self, 'Station:', stationOptions)
        self.stationSelect.setEvent(self.updateStatistic)

        # Type selectbox
        self.statisticTypeSelect = Select(self, 'Type:', {
            'Day': 'D',
            'Month': 'm',
            'Year': 'Y'
        })
        self.statisticTypeSelect.setEvent(self.updateStatistic)
        self.statisticTypeSelect.setValue('Day')

        # Date from calendar (7 Days before now)
        self.dateFromSelect = DateEntry(self,
                                        selectmode='day',
                                        date_pattern='dd.mm.y')
        self.dateFromSelect.set_date((now - timedelta(days=7)))
        self.dateFromSelect.bind("<<DateEntrySelected>>", self.updateStatistic)
        self.dateFromSelect.pack()

        # Date to calendar
        self.dateToSelect = DateEntry(self,
                                      selectmode='day',
                                      date_pattern='dd.mm.y')
        self.dateToSelect.set_date(now)
        self.dateToSelect.bind("<<DateEntrySelected>>", self.updateStatistic)
        self.dateToSelect.pack()

        # Statistic
        self.statistic = StatisticPrint(self, self.stationSelect.get(),
                                        self.dateFromSelect.get_date(),
                                        self.dateToSelect.get_date(),
                                        self.statisticTypeSelect.get())

    def updateStatistic(self, *args):
        self.statistic.set(self.stationSelect.get(),
                           self.dateFromSelect.get_date(),
                           self.dateToSelect.get_date(),
                           self.statisticTypeSelect.get())
def calendarDate():
    def getDate_Sel(e):
        fileCompDate.set(cal.get_date())

    cal = DateEntry(window,
                    width=12,
                    background='darkblue',
                    foreground='white',
                    borderwidth=2)
    cal.grid(column=1, row=8, sticky="W")
    cal.bind("<<DateEntrySelected>>", getDate_Sel)
def example2():
    def print_sel(e):
        print(cal.get_date())

    top = tk.Toplevel(root)

    ttk.Label(top, text='Choose date').pack(padx=10, pady=10)

    cal = DateEntry(top, width=12, background='darkblue',
                    foreground='white', borderwidth=2)
    cal.pack(padx=10, pady=10)
    cal.bind("<<DateEntrySelected>>", print_sel)
Exemplo n.º 7
0
Arquivo: gui.py Projeto: vshyshkin/pwr
    def create_datepicker(self, label, filter_key, column):
        tk.Label(self, text=label).grid(row=0, column=column, sticky="W")

        container = tk.Frame(self)

        date_picker = DateEntry(container, date_pattern=Filters.DATE_PATTERN)
        date_picker.config(validate='none')
        date_picker.bind('<<DateEntrySelected>>',
                         self.on_date_pick(filter_key))
        date_picker.delete(0, tk.END)
        date_picker.grid(row=0, column=0)

        clear_btn = tk.Button(
            container,
            text="x",
            command=self.on_clear_date_click(date_picker, filter_key),
        )
        clear_btn.grid(row=0, column=1, sticky="N")

        container.grid(row=1, column=column)
def mainwindow():

    lab = Label(root,
                text="Age Calculator",
                font=("Ariel", 40, "bold"),
                bg="red",
                padx=500)
    lab.grid(row=0, column=0, columnspan=10)

    lab1 = Label(root, text="Current Date", font=("Ariel", 30, "bold"))
    lab1.grid(row=1, column=0)

    entry = Entry(root, textvar=currentv, state=DISABLED)
    entry.grid(row=1, column=2)

    lab2 = Label(root, text="Date Of Birth", font=("Ariel", 30, "bold"))
    lab2.grid(row=2, column=0)

    global entry1
    entry1 = DateEntry(root, date_pattern="DD-MM-YYYY", state="readonly")
    entry1.grid(row=2, column=2)
    entry1.bind("<<DateEntrySelected>>", correction)

    lab = Label(root,
                text="Calculated Age",
                font=("Ariel", 40, "bold"),
                bg="green",
                padx=500)
    lab.grid(row=6, column=0, columnspan=10)
    lab1 = Label(root, text="Years", font=("Comic Sans MS", 30, "italic"))
    lab1.grid(row=8, column=1)
    yearsentry = Entry(root, textvar=yearsentryv)
    yearsentry.grid(row=9, column=1)
    lab2 = Label(root, text="Months", font=("Comic Sans MS", 30, "italic"))
    lab2.grid(row=8, column=3)
    monthsentry = Entry(root, textvar=monthsentryv)
    monthsentry.grid(row=9, column=3)
    lab3 = Label(root, text="Days", font=("Comic Sans MS", 30, "italic"))
    lab3.grid(row=8, column=5)
    daysentry = Entry(root, textvar=daysentryv)
    daysentry.grid(row=9, column=5)
Exemplo n.º 9
0
def get_meal():
    global cal, u
    user.withdraw()
    u = Toplevel()
    u.geometry('420x200')
    id = IntVar()
    Label(u, text = "Date").grid(row = 0, column = 0)
    cal = DateEntry(u)
    cal.grid(row = 1, column = 0)
    cal._top_cal.overrideredirect(False)
    cal.bind("<<DateEntrySelected>>", getdate)
    a = Radiobutton(u, text = "By Date", variable = id, value = 1)
    a.grid(row = 0, column = 1)
    a.select()
    all = Radiobutton(u, text = "Get All", variable = id, value = 0)
    all.grid(row = 1, column = 1)
    e = Radiobutton(u, text = "Expenditure", variable = id, value = 2)
    e.grid(row = 2, column = 1)
    md = partial(meal_date, id)
    Button(u, text = "go", command = md).grid(row = 3, column = 0)
    Button(u, text = "Back", command = back_selection).grid(row = 3, column = 1)
Exemplo n.º 10
0
def addmeal():
    global r, food, u, cal, category
    user.withdraw()
    u = Toplevel()
    u.geometry('400x200')
    Label(u, text = "Food Category").grid(row = 0, column = 0)
    category = ttk.Combobox(u, values=["Breakfast", "Lunch", "Dinner", "Late Night"], state = "readonly")
    category.grid(row = 1, column = 0)
    Label(u, text = "Restaurant").grid(row = 2, column = 0)
    r = ttk.Combobox(u, values=restaurants, state = "readonly")
    r.grid(row = 3, column = 0)
    r.bind("<<ComboboxSelected>>", foods)
    Label(u, text = "Foods").grid(row = 0, column = 1)
    food = ttk.Combobox(u, values = "Nothing", state = "readonly", postcommand=changeFoods)
    food.grid(row = 1, column = 1)
    Label(u, text = "Date").grid(row = 2, column = 1)
    cal = DateEntry(u)
    cal.grid(row = 3, column = 1)
    cal._top_cal.overrideredirect(False)
    cal.bind("<<DateEntrySelected>>", getdate)
    Button(u, text = "Add", command = addFoods).grid(row = 4, column = 0)
    Button(u, text = "Back", command = back_selection).grid(row = 4, column =1)
Exemplo n.º 11
0
class DateSelection(object):
    logger = CustomAdapter(logging.getLogger(str(__name__)), None)
    # date_selection_dict = {}

    # noinspection PyUnusedLocal
    @debug(lvl=logging.DEBUG, prefix='')
    def __init__(self,
                 parent,
                 row,
                 column,
                 label_text,
                 style=None,
                 *args,
                 **kwargs):
        self.parent = parent
        self.label_text = label_text
        self.row = row
        self.column = column
        self.style = style
        self.label = ttk.Label(self.parent,
                               text=self.label_text,
                               style=self.style)
        self.label.grid(row=self.row, column=self.column, sticky=tk.NW)
        self.value = None
        self.entry = DateEntry(
            self.parent, firstweekday="sunday", showweeknumbers=False
        )  # TODO: Apply some style to this date dropdown
        self.entry.grid(row=self.row, column=self.column + 1, sticky=tk.NE)
        self.entry.bind("<<DateEntrySelected>>", self.new_date)
        # DateSelection.date_selection_dict[label_text] = self

    # noinspection PyUnusedLocal
    @debug(lvl=logging.DEBUG, prefix='')
    def new_date(self, *args):
        DateSelection.logger.log(
            logging.DEBUG, "{} Selection: {}".format(self.label_text,
                                                     self.entry.get_date()))
        self.value = self.entry.get_date()
Exemplo n.º 12
0
class InputWindow(tk.Tk):
    #  ----- initialize -----
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    # ----- paths -----
        icon_path = f"media{os.sep}icons" #use os.sep for tracker to work in different OS
        # print(icon_path) #uncomment for troubleshooting
        self.img = ImageTk.PhotoImage(Image.open(f"media{os.sep}icons{os.sep}main.png"))

    # ----- Data ------
    #check for command line arguments
        if len(sys.argv) > 1:
            print(f"Currently running: {sys.argv[0]}")
            print(f"Data loading from: {sys.argv[1]}")
            # self.tracker = sys.argv[1]
        else:
            print('No data...creating new Tracker-object.')
            # self.tracker = ''


    # ----- Styles -----

        style = Style(self)

        # colors
        self.BG_COL_1 = "#DCDAD5"

        # custom styles
        style = ttk.Style()
        style.theme_use("clam")
        f = tkFont.Font(family='helvetica', size=15)
        style.configure('Test.TFrame', font=f)
        # customed_style.configure('Custom.TNotebook.Tab', padding=[12, 12], font=('Helvetica', 10))

    # ----- customize -----

        # title
        self.title("Health Tracker")

        # change taskbar icon
        # self.iconphoto(False, ImageTk.PhotoImage(file=os.path.join(icon_path, "main.png"))) 
        self.iconphoto(False, self.img) 

        # make fullscreen
        self.state('zoomed')

        # closing function
        self.protocol("WM_DELETE_WINDOW", self.on_exit)

        # configure rows and columns
        self.grid_columnconfigure(0, weight=0)
        self.grid_columnconfigure(1, weight=1)
        for n in range(20):
            self.grid_rowconfigure(n, weight=1)

        # save todays date on attribute
        self.current_date = datetime.datetime.now().date()

        # list to save EntryFrame objects in to use fot latter iterations
        self.entry_frames = []

        # properties to save info about user logging in
        self.user = None
        self.sex = None

        # list property to collect system processes in --> to be closed on frame exit (e.g. created using subprocess.Popen())
        self.sysproc = []

    # # ----- Frame Container -----

    #     # save a ttk frame - object in a variable named "container" 
    #     container = ttk.Frame(self) 
    #     container.grid() #position the frame in the parent widget in a grid
    #     container.columnconfigure(0, weight=1)

    #----- Login and SignUp Screen -----

        # add login frame that is placed within "container"
        self.login_frame = LoginWindow(self) #initiate Timer-class and pass self as the controller #, self.switch_frame
        self.login_frame#.grid(row=0,column=0, rowspan=20, columnspan=2, sticky='EWNS') #configure timer frame placed in the first row and first column and to fill the entire frame ("container")

        # add signup frame 
        self.signup_frame = SignupWindow(self, name="signup")
        self.signup_frame#.grid(row=0,column=0, rowspan=20, columnspan=2, sticky='EWNS')

        # add signup frame 
        self.userinfo_frame = UserinfoWindow(self)

    # ----- Tabs -----

        # initiate ttk.Notebook as parent for tabs
        self.tabControl = ttk.Notebook(self)#, style="Custom.TNotebook.Tab")

        # create tabs
        self.mood_tab = ttk.Frame(self.tabControl)
        self.health_tab = ttk.Frame(self.tabControl) #, relief = tk.SUNKEN
        self.sleep_tab = ttk.Frame(self.tabControl)
        self.food_tab = ttk.Frame(self.tabControl)
        self.fitness_tab = ttk.Frame(self.tabControl)
        self.period_tab = ttk.Frame(self.tabControl)
        self.longterm_tab = ttk.Frame(self.tabControl)

        # add tabs
        self.tabControl.add(self.mood_tab, text='Mood')
        self.tabControl.add(self.health_tab, text='Health')
        self.tabControl.add(self.sleep_tab, text='Sleep')
        self.tabControl.add(self.food_tab, text='Food')
        self.tabControl.add(self.fitness_tab, text='Fitness')
        self.tabControl.add(self.period_tab, text='Period')
        self.tabControl.add(self.longterm_tab, text='Longterm Changes')

        # # pack tabs - to make them visible 
        # # tabControl.pack(expand=0, fill="both", pady=(10,10))
        # self.tabControl.grid(row=0,column=0, rowspan=20, sticky='EWNS')
        # self.tabControl.grid_columnconfigure(0, weight=1)
        # for n in range(15):
        #     self.tabControl.grid_rowconfigure(n, weight=1)
        # tk.Button(self,text="Change date NOW",command=self.change_date, borderwidth=0, fg='darkslateblue').grid(row=1,column=1,rowspan=1, sticky='N')
        # # print(tabControl.tab(tabControl.select(), "text")) #uncomment for troubleshooting

    # ----- Labels ----- 
        fontLab = tkFont.Font(family='Verdana', size=40, weight='bold', slant='roman')
        ttk.Label(self.mood_tab,  text ="How's your head feeling? \n", font=fontLab).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.food_tab,  text ="How's your stomach feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.fitness_tab,  text ="How's your muscles feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.longterm_tab,  text ="How have you been? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.health_tab,  text ="How's your body feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.period_tab,  text ="How's your uterus feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        ttk.Label(self.sleep_tab,  text ="How's your ZZZZZZZs feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)

    #  ----- Entry -----

        EntryFrame(self.mood_tab, mood_info, self.tabControl.tab(self.mood_tab)['text'], name='mood_tab').grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.health_tab, health_info, self.tabControl.tab(self.health_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.food_tab, food_info, self.tabControl.tab(self.food_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.sleep_tab, sleep_info, self.tabControl.tab(self.sleep_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.fitness_tab, fitness_info, self.tabControl.tab(self.fitness_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.period_tab, period_info, self.tabControl.tab(self.period_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        EntryFrame(self.longterm_tab, longterm_info, self.tabControl.tab(self.longterm_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)

        # if self.sex != 'male':
        #     period_tab = ttk.Frame(self.tabControl)
        #     self.tabControl.add(period_tab, text='Period')
        #     ttk.Label(period_tab,  text ="How's your uterus feeling? \n", font={'size':12}).grid(row=0, column=0, columnspan=2)
        #     EntryFrame(period_tab, period_info, self.tabControl.tab(period_tab)['text']).grid(row=1, column=0, sticky="NSEW", padx=10, pady=10)
        #     self.all_tabs = [mood_tab, food_tab, fitness_tab, period_tab, longterm_tab, health_tab, sleep_tab]
        # else:
        #     self.all_tabs = [mood_tab, food_tab, fitness_tab, longterm_tab, health_tab, sleep_tab]

        self.all_tabs = [self.mood_tab, self.food_tab, self.fitness_tab, self.period_tab, self.longterm_tab, self.health_tab, self.sleep_tab]

        # current tab
        tabName = self.tabControl.select()  #get name of current tab
        self.active_tab = self.tabControl.nametowidget(tabName)  #get widget-object from widget name (string)

        # create dictionary to keep track of frames
        self.frames = dict()
        self.frames_visibility = dict()

        # add both frames to dict
        self.frames['LoginWindow'] = self.login_frame
        self.frames['SignupWindow'] = self.signup_frame
        self.frames['UinfoWindow'] = self.userinfo_frame
        self.frames['TC'] = self.tabControl

        # start with timer_frame in front
        self.switch_frame('LoginWindow')

        self.tabControl.grid(row=0,column=0, rowspan=20, sticky='EWNS')
        self.tabControl.grid_columnconfigure(0, weight=1)
        for n in range(15):
            self.tabControl.grid_rowconfigure(n, weight=1)

        self.date_button = tk.Button(self,text="Change date NOW",command=self.change_date, borderwidth=0, fg='darkslateblue')

    # ----- Date Picker ------
        self.cal = DateEntry(self, width=12, background='darkblue',
                            foreground='white', borderwidth=2)

        # print([obj.winfo_name() for obj in self.entry_frames])


    # function printing selected date from calendar
    def print_sel(self, event=None):
        """
        Changes selected data in Entryframes

        Parameters:
            event: event - not None when called by self.change_date(); None when called by self.reset_tracker()
        """
        if event:
            try:
                old_date = self.current_date
            except:
                old_date = datetime.datetime.now().date()
            new_date = self.cal.get_date()
            self.current_date = new_date
            print(f"Date changed from {old_date} to {self.current_date}")
        else:
            self.current_date = datetime.datetime.now().date()  

        date_string = self.current_date.strftime("%Y-%m-%d") #convert datetime object to string in order to be able to pass it to .loc[]
        # get data
        data = db_transact.query_data_by_date_and_user(date_string, self.user)

        # update all EntryFrame fields based on date
        for entry_frame in self.entry_frames:
            if type(data) != dict:  #check if any data was returned from database for specified date and user
                entry_frame.create_blank_entryframes()
            else:
                entry_frame.update_selection(data, date_string) 


        # ----- method toggling date picker and printing selection ------
    
    def change_date(self):

        self.cal.bind("<<DateEntrySelected>>", lambda event: self.print_sel(event=event))

        if self.cal.winfo_ismapped():
            self.cal.grid_remove()
        else:
            self.cal.grid(row=3,column=1,rowspan=1, sticky='N')


    def on_tab_change(self, *event):

        #get EntryFrame of interest from current tab (2nd child object in current tab)
        '''
        The current tab (saved in self.active_tab) is a custom object parameter is used to save info on current active tab outside of native tkinter functionality ).
        The active tab is a ttk.Frame-object, that contains 3 children: a label, an EntryFrame and a Past_Entry_Frame.
        --> below: get the 2nd child-object from active tab - this is an EntryFrame-type object
        '''
        active_entryframe = self.active_tab.winfo_children()[1]  

        # check if any information was entered in current EntryFrame (-> changes for each information field saved as TRUE-values in value_entry_record-property) 
        if any(v==True for v in active_entryframe.value_entry_record.values()):  #check for any True-values in active_entryframe.value_entry_record-dict
            # insert EntryFrame data in database and display success message
            active_entryframe.insert_database(self.user, self.current_date) 
            message = f"""Database table {active_entryframe.tab} filled with values"""
            # change all values in entry-dict back to False, in order to avoid unneccesary database connections when re-opening this tab
            active_entryframe.value_entry_record = {k: False for k in active_entryframe.value_entry_record}
            self.toplevel_message('Success!', message, 1500)

        # change value of self.active_tab, as the tab was changed - done AFTER calling active_entryframe.insert_database(), otherwise the un-filled newly opened tab info is inserted to database
        tabName = self.tabControl.select() 
        self.active_tab = self.tabControl.nametowidget(tabName) 
        # print(self.tabControl.tab(self.tabControl.select(), "text"))  #uncomment for troubleshooting


    # ----- funtion to run upon closing the window -----
    def on_exit(self):
        print("Closing down background processes...")
        self.kill_processes(self.sysproc)
        print("Saving latest changes...")
        self.on_tab_change()  #save entries of last tab without tab change
        print("Exiting app...")
        self.destroy()  #destroy window

    def kill_processes(self, processes):
        """
        Kills every process in a list of processes.

        Parameters:
            processes (list) - list of processes

        Returns:
            void function
        """
        for process in processes:
            process.kill()
        return

    def add_plots(self):
        # ----- iterate over all notebook tabs -----
        for tab in self.all_tabs:

            # save each tab's EntryFrame object in list for latter use
            for child in tab.winfo_children():
                if type(child)==EntryFrame:
                    self.entry_frames.append(child)

            # get current notebook tab's text
            tab_name = self.tabControl.tab(tab)['text']

            # create tk.Canvas-objects as plotting area
            cur_tab = PastEntryFrame(tab, tab_name)
            cur_tab.grid(row=1, column=1, sticky="NSEW", padx=10, pady=10)
            cur_tab.display_plots(tab_name)


    # ----- function that brings frame on the back to the front -----
    def switch_frame(self, container):

        # ungrid current frame --> to avoid seeing "background"-frame, as frames are of different size, to avoid seeing "background"-frame
        for fname, frame in self.frames.items():
            if frame.winfo_viewable():
                frame.grid_forget()
    
        # indicate which frame to bring to show
        frame = self.frames[container]

        # create UI if frame to switch to is 'TC' - important to load TC after login only and to directly load correct user data based on self.user
        if frame == self.frames['TC']:
            if self.sex == 'male':
                self.change_tab_state(self.period_tab)
            else:
                self.change_tab_state(self.period_tab, method="enable")
            self.add_plots()
            self.date_button.grid(row=1,column=1,rowspan=1, sticky='N')
            frame.grid(row=0,column=0, rowspan=20, sticky='EWNS') 
        else:
            frame.grid(row=0,column=0, rowspan=20, columnspan=2,sticky='EWNS') 

        #brings indicated frame to the front
        frame.tkraise()  #keep tk.raise() in addition to .grid_forget() as 'TC' is always loaded to grid


    def toplevel_message(self, title, message, duration):
        top = tk.Toplevel()
        top.title(title)
        tk.Message(top, text=message, padx=20, pady=20).pack()
        top.after(duration, top.destroy)

    
    def change_tab_state(self, tab, method="disable"):
        """
        Changes status of specified ttk.Notebook-tab.
        If state change to "enabled", the state needs to be checked, as enabling from hidden vs disabled status use different functions.

        Parameters:
            tab: variable name of tab (NOT a string) - e.g. mood_tab
            method: string - "disable" (default) or "hide" or "enable"

        Returns: Void function
        """

        if method == "disable":
            self.tabControl.tab(tab, state="disabled")
            print(self.tabControl.tab(tab)['state'])
        elif method == "hide":
            self.tabControl.hide(tab)
            print(self.tabControl.tab(tab)['state'])
        elif method == "enable":
            state = self.tabControl.tab(tab)['state']
            if state == "hidden":
                self.tabControl.add(tab)
            elif state == "disabled":
                self.tabControl.tab(tab, state="normal")


    def reset_tracker(self):
        """
        Resets tracker interface (=ttk.Notebook object) and tkcalendar.DateEntry-object, when switching between users.
        This method is run from LoginWindow-object.


        Returns: Void function
        """

        self.tabControl.select(0)  #make first tab current tab every time new TC loads
        self.current_date = datetime.datetime.now().date()  
        self.cal.set_date(self.current_date)  #reset DateEntry-object
        self.print_sel()
        if self.cal.winfo_ismapped():  #toggle in
            self.cal.grid_remove()
Exemplo n.º 13
0
class ExpenseWindow:
    def __init__(self, data=''):
        self.data = data
        print(self.data)
        self.win = Tk()
        self.canvas = Canvas(self.win, width=600, height=400, bg="white")
        self.canvas.pack(expand=YES, fill=BOTH)

        # bringing the screen in the centre
        width = self.win.winfo_screenwidth()
        height = self.win.winfo_screenheight()
        x = int(width / 2 - 600 / 2)
        y = int(height / 2 - 400 / 2)
        strl = "600x400+" + str(x) + "+" + str(y)
        self.win.geometry(strl)

        # disable resize of the window

        self.win.resizable(width=False, height=False)

        # change the title of the window
        self.win.title("WELCOME | Add Expense | ADMINISTRATOR")

    def add_frame(self):
        # create an inner frame
        self.frame = Frame(self.win, height=400, width=500)
        self.frame.place(x=55, y=50)
        x, y = 0, 0
        self.label = Label(self.frame, text="Add Expense")
        self.label.config(font=("Courier", 25, 'bold'), bg='green yellow')
        self.label.place(x=120, y=y + 10)
        # drop down menu
        OPTIONS = ['Food', 'Petrol', 'Shopping', 'Entertainment', 'College']
        self.variable = StringVar(self.win)
        self.variable.set(OPTIONS[0])

        self.label = Label(self.frame, text="Add Expense Source")
        self.label.config(font=("Courier", 15, 'bold'))
        self.label.place(x=x + 10, y=90)
        self.source = OptionMenu(self.frame,
                                 self.variable,
                                 *OPTIONS,
                                 command=self.dropdown)
        self.source.place(x=250, y=90)

        self.label = Label(self.frame, text="Add amount")
        self.label.config(font=("Courier", 15, 'bold'))
        self.label.place(x=x + 10, y=120)
        self.inc = Entry(self.frame, font='Courier 16')
        self.inc.place(x=250, y=120)

        # calendar
        self.label = Label(self.frame, text="Add date")
        self.label.config(font=("Courier", 15, 'bold'))
        self.label.place(x=x + 10, y=150)
        self.dob = DateEntry(self.frame,
                             font=('Courier', 12, 'bold'),
                             bg='darkblue',
                             fg='white',
                             borderwidth=2,
                             command=self.dates,
                             date_pattern='YYYY/MM/DD')
        self.dob.place(x=250, y=150)

        # on date change listener
        self.dob.bind('<<DateEntrySelected>>', self.dates)

        if self.data == '':
            self.button = Button(self.frame,
                                 text="SUBMIT",
                                 font=('helvetica', 20, 'underline italic'),
                                 bg='dark green',
                                 fg='white',
                                 command=self.add_expense)
            self.button.place(x=x + 80, y=y + 200)
        else:
            up = dict(self.data).get('values')
            # set the values in input boxes

            self.inc.insert(0, up[1])
            self.dob.insert(0, up[2])
            self.button = Button(self.frame,
                                 text="UPDATE",
                                 font=('helvetica', 20, 'underline italic'),
                                 bg='dark green',
                                 fg='white',
                                 command=self.update_expense)
            self.button.place(x=x + 80, y=y + 200)

        self.lblmsg = Label(self.frame, text='')
        self.lblmsg.config(font=('Courier', 12, 'bold'))
        self.lblmsg.place(x=x + 100, y=y + 260)

        self.win.mainloop()

    def dropdown(self, value, *args):
        print(self.variable.get())

    def dates(self, value, *args):
        print(self.dob.get_date())

    def add_expense(self):
        data = (self.variable.get(), self.inc.get(), self.dob.get())
        if self.variable.get() == '':
            self.lblmsg.config(fg='red')
            self.lblmsg.config(text="please enter expense source")

        elif self.inc.get() == '':
            self.lblmsg.config(fg='red')
            self.lblmsg.config(text='please enter amount')

        elif self.dob.get() == '':
            self.lblmsg.config(fg='red')
            self.lblmsg.config(text='please enter date')

        else:
            res = db.db.add_expense(data)
            if res:
                self.lblmsg.config(fg='green')
                self.lblmsg.config(text="data added successfully")

            else:
                self.lblmsg.config(fg='red')
                self.lblmsg.config(text='Alert! please try again')

    def update_expense(self):
        tup = (self.inc.get(), self.dob.get(), dict(self.data).get('text'))
        res = db.db.update_expense(tup)
        if res:
            messagebox.showinfo("Message", "expense updated successfully")
            self.win.destroy()
            x = expense.showExpense.showExpense()
            x.add_frame()
class rsearch(tk.Tk):
    def __init__(self, *args, **kwargs):
        # __init__ function for class Tk
        tk.Tk.__init__(self, *args, **kwargs)
        # self = Tk()
        current_date = date.today()
        tomorrow = date.today() + timedelta(1)
        print(type(tomorrow))
        self.title("Search")
        self.geometry("900x500")
        self.config(background="black", pady=10)
        label1 = tk.Label(self, text='Check In Date')
        label1.place(x='60', y='40')
        self.cal = DateEntry(self,
                             width=12,
                             year=current_date.year,
                             month=current_date.month,
                             day=current_date.day,
                             mindate=current_date,
                             date_pattern='y-mm-dd',
                             background='darkblue',
                             foreground='white',
                             borderwidth=2)
        self.cal.place(x='60', y='80')
        label2 = tk.Label(self, text='Check out Date')
        label2.place(x='200', y='40')
        self.cal.bind("<<DateEntrySelected>>", self.callback)
        date_time_obj = datetime.datetime.strptime(self.cal.get(), '%Y-%m-%d')
        print(type(date_time_obj))
        # if self.cal.get():
        #     min_date=self.cal.get()
        # else:
        #    min_date=tomorrow
        self.cal1 = DateEntry(self,
                              width=12,
                              year=tomorrow.year,
                              month=tomorrow.month,
                              day=tomorrow.day,
                              mindate=tomorrow,
                              date_pattern='y-mm-dd',
                              background='darkblue',
                              foreground='white',
                              borderwidth=2)
        self.cal1.place(x='200', y='80')
        # reg = self.register(self.callback)
        #
        # self.cal1.config(validate="key",
        #          validatecommand=(reg, '% P'))
        button = tk.Button(self, text='Search', command=self.search)
        button.place(x='150', y='120')

    def search(self):
        print(self.cal.get())
        print(self.cal1.get())
        self.destroy()
        bpage = booking()

    def callback(self, input):
        w = input.widget
        date = w.get_date() + timedelta(1)
        self.cal1.config(mindate=date)
Exemplo n.º 15
0
class Utils:

    date_from_cal, date_to_cal = None, None
    date_from_lbl, date_to_lbl = None, None

    # this is called when a county selection is made, but may not always show.
    def show_municipalities(self, central, search):
        # municipalities selection will only show if advanced settings has been selected.
        if central.advanced:

            """
            Check if county selection is all - if so, remove the widgets from frame.
            Check if municipality already exists - if so, remove it. 
            
            This is done because if county selection is all, you can't pick a municipality. If the municipality
            already exists, it gets removed because it may need to be populated with the results of a new county
             selection, if county selection isn't already all. """

            try:
                if search.county.lower() == "all" or central.root.nametowidget('county.municipality') is not None:
                    central.root.nametowidget('county.lbl_municipalities').grid_forget()
                    central.root.nametowidget('county.municipality').grid_forget()
            except KeyError as e:
                print("The issue is that the widget that you are looking for is not in the frame yet.")
                print(e)
                pass

            # if county selection isn't all, then populate the proper municipality data.
            if search.county.lower() != "all":
                municipalities = scrape.get_municipality(scrape.get_counties()[search.county])
                if municipalities is not None:
                    for widget in central.frame.winfo_children():
                        if 'row' in widget.grid_info() and widget.grid_info()['row'] > 0:
                            widget.grid(row=widget.grid_info()['row'] + 1, column=widget.grid_info()['column'])

                lbl_municipalities = Label(central.frame, name="lbl_municipalities", text="Municipalities: ")
                lbl_municipalities.grid(column=0, row=1, sticky='w')

                municipalities_lst = list(municipalities.keys())

                municipalities_lst.insert(0, "All")
                municipality_menu = ttk.Combobox(central.frame, values=municipalities_lst, name="municipality")
                municipality_menu.set(municipalities_lst[0])

                def post_municipalities():
                    search.update('municipality', municipality_menu.get())
                    if municipality_menu.get() != "ALL":
                        search.update('municipality_id', municipalities[municipality_menu.get()])
                    else:
                        search.update('municipality_id', None)


                municipality_menu.bind('<<ComboboxSelected>>', lambda _: post_municipalities())
                municipality_menu.grid(column=1, row=1)


    def toggle_advanced_settings(self, central, search):
        advanced_btn, submit_btn = None, None
        central.advanced = (not central.advanced)

        for widget in central.frame.winfo_children():
            if type(widget) is Button:
                if "submit" in widget['text'].lower():
                    submit_btn = widget
                elif "advanced settings" in widget['text'].lower():
                    advanced_btn = widget
                widget.grid_forget()

        if central.advanced:
            status_label = Label(central.frame, text="Status: ")
            filer_label = Label(central.frame, text="Filer: ")
            registered_label = Label(central.frame, text="Registered Within: ")

            status_opt = [e.name.title() for e in Status]
            status = ttk.Combobox(central.frame, values=status_opt)
            status.set(status_opt[0])
            status.bind('<<ComboboxSelected>>', lambda _: search.update('status', status.get()))
            row = 1

            registered_opt = [e.name.replace("_", " ").title() for e in Registered]
            registered = ttk.Combobox(central.frame, values=registered_opt)
            registered.set(registered_opt[0])
            registered.bind('<<ComboboxSelected>>', lambda _: self.date_range(search, central, registered.get()))

            filer_opt = [e.name.title() for e in Filer]
            filer = ttk.Combobox(central.frame, values=filer_opt)
            filer.set(filer_opt[0])
            filer.bind('<<ComboboxSelected>>', lambda _: search.update('filer', filer.get()))

            status_label.grid(column=0, row=row, sticky='w')
            status.grid(column=1, row=row)
            row += 1

            filer_label.grid(column=0, row=row, sticky='w')
            filer.grid(column=1, row=row)
            row += 1

            registered_label.grid(column=0, row=row, sticky='w')
            registered.grid(column=1, row=row)
            row += 1

            submit_btn.grid(column=0, row=row, columnspan=2)
            row += 1
            advanced_btn.config(text="Hide Advanced Settings")
            advanced_btn.grid(column=0, row=row, columnspan=2)

            if search.county != "ALL":
                self.show_municipalities(central, search)

        else:
            for item in central.root.winfo_children():
                item.grid_forget()
            return CountySearch(search, central).county_search()



    def date_range(self, search, central, selection):
        search.update('registered', selection)
        last_row = 0

        if selection == "Date Range":
            for widget in central.frame.winfo_children():
                if 'row' in widget.grid_info():
                    if type(widget) is not Button:
                        if last_row < widget.grid_info()['row']:
                            last_row = widget.grid_info()['row'] + 1
                    else:
                        widget.grid(row=(widget.grid_info()['row'] + 2))

            self.date_from_lbl = Label(central.frame, text="Date From: ", name='lbl_date_from')
            self.date_to_lbl = Label(central.frame, text="Date To: ", name='lbl_date_to')

            self.date_from_cal = DateEntry(central.frame)
            self.date_from_cal.bind("<<DateEntrySelected>>", lambda _:
                                    search.update(Registered.DATE_RANGE, 'dateFrom', date=self.date_from_cal.get()))

            self.date_to_cal = DateEntry(central.frame)
            self.date_to_cal.bind("<<DateEntrySelected>>", lambda _:
                                  search.update(Registered.DATE_RANGE, 'dateTo', date=self.date_to_cal.get()))

            self.date_from_lbl.grid(column=0, row=last_row)
            self.date_from_cal.grid(column=1, row=last_row)
            last_row += 1

            self.date_to_lbl.grid(column=0, row=last_row)
            self.date_to_cal.grid(column=1, row=last_row)
        else:
            try:
                central.root.nametowidget('county.lbl_date_from').grid_forget()
                central.root.nametowidget('county.lbl_date_to').grid_forget()

                # temporary solution
                for widget in central.frame.winfo_children():
                    if isinstance(widget, DateEntry):
                        widget.destroy()
            except KeyError as e:
                print(e)
Exemplo n.º 16
0
    def show_date_fields(self):

        def set_start_sel(event):
            self.start_date = start_date_cal.get_date()
            self.selected_start_date.set(self.start_date.strftime("%b %d, %Y"))

        def set_end_sel(event):
            self.end_date = end_date_cal.get_date()
            self.selected_end_date.set(self.end_date.strftime("%b %d, %Y"))

        date_frame = ttk.Frame(self)

        date_title_label = ttk.Label(
            date_frame,
            text="Select a timeframe to include transactions"
        )
        date_title_label.grid(
            column=0, row=0, columnspan=2, pady=20)

        start_date_label = ttk.Label(
            date_frame,
            text="Start Date",
            style='Small.TLabel'
        )
        start_date_label.grid(column=0, row=1)
        start_date_cal = DateEntry(
            date_frame, font="Arial 14", selectmode='day', locale='en_US',
            date_pattern='MM/dd/yyyy', maxdate=date.today(),
            showweeknumbers=False,
            firstweekday='sunday',
            bordercolor=self.colors['DARK_GREY'],
            background=self.colors['DARK_GREY'],
            normalbackground=self.colors['DARK_GREY'], normalforeground=self.colors['WHITE'],
            weekendbackground=self.colors['MED_GREY'], weekendforeground=self.colors['WHITE'],
            disabledbackground=self.colors['LIGHT_GREY'], disabledforeground=self.colors['DARK_GREY'],
            disabledselectbackground=self.colors['LIGHT_GREY'], disabledselectforeground=self.colors['DARK_GREY'],
            headersbackground=self.colors['DARK_GREY'], headersforeground=self.colors['WHITE'],
            othermonthbackground=self.colors['DARK_GREY'], othermonthforeground=self.colors['LIGHT_GREY'],
            othermonthwebackground=self.colors['MED_GREY'], othermonthweforeground=self.colors['LIGHT_GREY'],
            selectbackground=self.colors['BLUE'], selectforeground=self.colors['WHITE'])
        start_date_cal.bind("<<DateEntrySelected>>", set_start_sel)
        start_date_cal.grid(column=0, row=2, padx=25)

        end_date_label = ttk.Label(
            date_frame,
            text="End Date",
            style='Small.TLabel'
        )
        end_date_label.grid(column=1, row=1)
        end_date_cal = DateEntry(
            date_frame, font="Arial 14", selectmode='day', locale='en_US',
            date_pattern='MM/dd/yyyy', maxdate=date.today(),
            showweeknumbers=False,
            firstweekday='sunday',
            bordercolor=self.colors['DARK_GREY'],
            background=self.colors['DARK_GREY'],
            normalbackground=self.colors['DARK_GREY'], normalforeground=self.colors['WHITE'],
            weekendbackground=self.colors['MED_GREY'], weekendforeground=self.colors['WHITE'],
            disabledbackground=self.colors['LIGHT_GREY'], disabledforeground=self.colors['DARK_GREY'],
            disabledselectbackground=self.colors['LIGHT_GREY'], disabledselectforeground=self.colors['DARK_GREY'],
            headersbackground=self.colors['DARK_GREY'], headersforeground=self.colors['WHITE'],
            othermonthbackground=self.colors['DARK_GREY'], othermonthforeground=self.colors['LIGHT_GREY'],
            othermonthwebackground=self.colors['MED_GREY'], othermonthweforeground=self.colors['LIGHT_GREY'],
            selectbackground=self.colors['BLUE'], selectforeground=self.colors['WHITE'])

        end_date_cal.bind("<<DateEntrySelected>>", set_end_sel)
        end_date_cal.grid(column=1, row=2, padx=25)

        from_label = ttk.Label(
            date_frame,
            text="From",
            style="TLabel",
            padding='10 25 10 10'
        )
        from_label.grid(column=0, row=3, padx=10)

        to_label = ttk.Label(
            date_frame,
            text="To",
            style="TLabel",
            padding='10 25 10 10'
        )
        to_label.grid(column=1, row=3, padx=10)

        selected_start_date = ttk.Label(
            date_frame,
            textvariable=self.selected_start_date,
            style="Small.TLabel",
            padding='5 5 5 5',
            background=self.colors['BLUE']
        )
        selected_start_date.grid(
            column=0, row=4, padx=10)

        selected_end_date = ttk.Label(
            date_frame,
            textvariable=self.selected_end_date,
            style="Small.TLabel",
            padding='5 5 5 5',
            background=self.colors['BLUE']
        )
        selected_end_date.grid(column=1, row=4, padx=10)

        date_frame.grid(column=1, row=1, columnspan=2, pady=20)
Exemplo n.º 17
0
        button_list = []
        loadgrid(date, data=[])
        insertgrid(button_list)


picker_frame = LabelFrame(root)
picker_frame.grid(row=7, column=0, columnspan=25)

cal = DateEntry(picker_frame,
                width=12,
                background='darkblue',
                foreground='white',
                borderwidth=2,
                date_pattern='dd-mm-yyyy')
cal.grid(row=0, column=1, padx=10)
cal.bind('<<DateEntrySelected>>', when_date_changed)
cal.set_date(date)


def r_arrow():
    global date
    _date = date + timedelta(1)
    cal.set_date(_date)
    when_date_changed(0)


r_arrow = Button(picker_frame, text='🢂', command=r_arrow)
r_arrow.grid(row=0, column=2)


def l_arrow():
Exemplo n.º 18
0
class ProfitPerDayAnalysis():
    def __init__(self, username):
        self.username = username
        db = mysql.connector.connect(host='localhost',
                                     database='medical',
                                     user='******',
                                     passwd='test')
        self.dbcursor = db.cursor()
        #self.dbcursor.execute("select distinct(Name) from medicine")
        #self.result = self.dbcursor.fetchall()
        #self.medicines = list(self.result)
        #self.dbcursor.execute("select distinct(Category) from medicine")
        #self.result = self.dbcursor.fetchall()
        #self.category = list(self.result)
        #self.med_name = "Chlorpheniramine"
        #self.cat_name = "Capsule"
        self.sale_in = "Last month"
        self.month = date.today().month - 1
        self.fromday = "1"
        self.interval = 7
        self.year = str(d.datetime.now().year)
        self.totalBars = 4

        self.init_components()
        self.showGraph1()
        self.showGraph2()
        self.showGraph3()
        self.configure_components()
        self.pack_components()
        self.run()

    def init_components(self):
        self.window = tk.Tk()

        #self.selected_med = StringVar()
        #self.selected_cat = StringVar()
        self.selected_sale_in = StringVar()
        self.heading_label = tk.Label(self.window,
                                      text="Profit Analysis",
                                      font="Verdana 18 bold",
                                      fg="white")

        self.sale_in_label = tk.Label(self.window,
                                      text="Profit in : ",
                                      font="Verdana 12 ",
                                      anchor=E)
        #self.from_label = tk.Label(self.window, text="From : ", font="Verdana 12 ", anchor=E)
        self.to_label = tk.Label(self.window, text="To : ", font="Verdana 12 ")
        self.sale_in_combo = ttk.Combobox(
            self.window,
            values=["Last Year", "Last month", "Last week"],
            width="25",
            textvariable=self.selected_sale_in)
        self.From_Cal = DateEntry(self.window,
                                  width=15,
                                  background='darkblue',
                                  foreground='white',
                                  borderwidth=2)
        self.To_Cal = DateEntry(self.window,
                                background='darkblue',
                                foreground='white',
                                borderwidth=2,
                                width=15)

        #self.backbtn = tk.Button(self.window, text="Back", bg="#63D792", fg="white", activebackground="#63D7CC")
        self.homebtn = tk.Button(self.window,
                                 text="Home",
                                 bg="#D76386",
                                 fg="white",
                                 activebackground="#D763C2",
                                 command=self.home)
        self.logoutbtn = tk.Button(self.window,
                                   text="Log Out",
                                   bg="#D79F63",
                                   fg="white",
                                   activebackground="#D77D63",
                                   command=self.logout)

        #graph3
        self.figure1 = plt.Figure(figsize=(4.5, 5.6), dpi=100)
        self.ax1 = self.figure1.add_subplot(111)
        self.bar1 = FigureCanvasTkAgg(self.figure1, self.window)

        #graph1
        self.figure2 = plt.Figure(figsize=(4.5, 5.6), dpi=100)
        self.ax2 = self.figure2.add_subplot(111)
        self.bar2 = FigureCanvasTkAgg(self.figure2, self.window)

        self.profit_on_label = tk.Label(self.window,
                                        text="Profit on : ",
                                        font="Verdana 12 ",
                                        anchor=E)
        self.profit_on_Cal = DateEntry(self.window,
                                       background='darkblue',
                                       foreground='white',
                                       borderwidth=2,
                                       width=15)

        #graph2
        self.figure3 = plt.Figure(figsize=(5, 5.6), dpi=100)
        self.ax3 = self.figure3.add_subplot(111)
        self.bar3 = FigureCanvasTkAgg(self.figure3, self.window)

    def configure_components(self):
        self.window.configure(bg="#d7eaf5")
        self.heading_label.configure(bg="#0064de")
        self.sale_in_label.configure(bg="#d7eaf5")
        #self.from_label.configure(bg="#d7eaf5")
        self.to_label.configure(bg="#d7eaf5")
        self.profit_on_label.configure(bg="#d7eaf5")

        self.ax1.patch.set_facecolor("#d7eaf5")
        self.ax2.patch.set_facecolor("#d7eaf5")
        self.ax2.patch.set_facecolor("#d7eaf5")

    def showGraph1(self):

        #------------#
        self.df = pd.DataFrame()
        if self.sale_in == "Last month":
            self.month = date.today().month - 1
            self.fromday = "1"
            self.interval = 7
            self.year = str(d.datetime.now().year)
            self.totalBars = 4
            self.startdate = self.year + "-" + str(
                self.month) + "-" + self.fromday
            self.startdate = datetime.strptime(self.startdate, '%Y-%m-%d')
            self.toDate = self.startdate + timedelta(days=self.interval)
            self.bar = 1

            while (self.bar <= self.totalBars):
                self.dbcursor.execute(
                    "select medicine.Name, medicine.Tax, medicine.Cost_Price/medicine.No_Of_Medicines_Per_Strip as cp, bill.Amount, bill.Rate, bill.Bill_Quantity,bill.Date from medicine inner join bill on bill.Medicine_Name = medicine.Name and bill.Batch_No = medicine.Batch_No  AND Date BETWEEN '"
                    + str(self.startdate) + "' AND '" + str(self.toDate) + "'")

                #self.dbcursor.execute("select count(Bill_Quantity) from bill where Medicine_Name = '" + self.med_name + "' and Category='" + self.cat_name + "' AND Date BETWEEN '" + str(self.startdate) + "' AND '" + str(self.toDate) + "'")
                self.result = self.dbcursor.fetchall()
                self.resultlen = self.dbcursor.rowcount
                self.df2 = pd.DataFrame(self.result)

                if self.resultlen == 0:
                    self.df2['Profit'] = 0
                else:
                    self.df2['Profit'] = (self.df2[3] -
                                          (self.df2[4] * self.df2[5] * 0.02 *
                                           self.df2[1])) - (self.df2[2] *
                                                            self.df2[5])

                self.df = self.df.append(
                    {
                        'Week': 'week' + str(self.bar),
                        'Profit': self.df2['Profit'].sum()
                    },
                    ignore_index=True)
                self.bar = self.bar + 1
                self.startdate = self.toDate + timedelta(days=1)
                self.toDate = self.startdate + timedelta(days=self.interval)

        elif self.sale_in == "Last Year":
            self.month = date.today().month
            self.fromday = "1"
            self.year = str(d.datetime.now().year - 1)
            self.totalBars = 12
            self.bar = 1
            self.startdate = self.year + "-" + str(
                self.month) + "-" + self.fromday
            self.startdate = datetime.strptime(self.startdate, '%Y-%m-%d')

            while (self.bar <= self.totalBars):
                self.month = self.startdate.month
                self.year = self.startdate.year
                self.interval = calendar.monthrange(self.year, self.month)[1]
                self.toDate = self.startdate + timedelta(days=self.interval)

                self.dbcursor.execute(
                    "select medicine.Name, medicine.Tax, medicine.Cost_Price/medicine.No_Of_Medicines_Per_Strip as cp, bill.Amount, bill.Rate, bill.Bill_Quantity,bill.Date from medicine inner join bill on bill.Medicine_Name = medicine.Name and bill.Batch_No = medicine.Batch_No  AND Date BETWEEN '"
                    + str(self.startdate) + "' AND '" + str(self.toDate) + "'")
                self.result = self.dbcursor.fetchall()
                self.len = self.dbcursor.rowcount
                self.df2 = pd.DataFrame(self.result)
                if self.len == 0:
                    self.df2['Profit'] = 0
                else:
                    self.df2['Profit'] = (self.df2[3] -
                                          (self.df2[4] * self.df2[5] * 0.02 *
                                           self.df2[1])) - (self.df2[2] *
                                                            self.df2[5])

                #self.dbcursor.execute("select count(Bill_Quantity) from bill where Medicine_Name = '" + self.med_name + "' and Category='" + self.cat_name + "' AND Date BETWEEN '" + str(self.startdate) + "' AND '" + str(self.toDate) + "'")

                self.xaxis = str(calendar.month_name[self.month])[:3]

                self.df = self.df.append(
                    {
                        'Week': self.xaxis + str(self.year),
                        'Profit': self.df2['Profit'].sum()
                    },
                    ignore_index=True,
                    sort=None)
                self.bar = self.bar + 1
                self.startdate = self.toDate

        else:
            self.startdate = date.today() - timedelta(days=7)
            self.bar = 1
            self.totalBars = 7
            while (self.bar <= self.totalBars):
                self.dbcursor.execute(
                    "select medicine.Name, medicine.Tax, medicine.Cost_Price/medicine.No_Of_Medicines_Per_Strip as cp, bill.Amount, bill.Rate, bill.Bill_Quantity,bill.Date from medicine inner join bill on bill.Medicine_Name = medicine.Name and bill.Batch_No = medicine.Batch_No  AND Date = '"
                    + str(self.startdate) + "'")
                self.result = self.dbcursor.fetchall()
                self.len = self.dbcursor.rowcount
                self.df2 = pd.DataFrame(self.result)
                if self.len == 0:
                    self.df2['Profit'] = 0
                else:
                    self.df2['Profit'] = (self.df2[3] -
                                          (self.df2[4] * self.df2[5] * 0.02 *
                                           self.df2[1])) - (self.df2[2] *
                                                            self.df2[5])

                self.bar = self.bar + 1
                self.df = self.df.append(
                    {
                        'Week': self.startdate,
                        'Profit': self.df2['Profit'].sum()
                    },
                    ignore_index=True,
                    sort=None)
                self.startdate = self.startdate + timedelta(days=1)

        self.bar2.get_tk_widget().grid(row=4, column=0, columnspan=3)
        self.ax2.patch.set_facecolor("#d7eaf5")
        self.df = self.df[['Week', 'Profit']].groupby('Week', sort=False).sum()
        self.df.plot(kind='bar', legend=True, ax=self.ax2, rot=30)
        self.ax2.set_title("Profit in " + self.sale_in)

    def showGraph2(self):
        self.startdate = self.From_Cal.get_date()
        self.toDate = self.To_Cal.get_date()

        self.dbcursor.execute(
            "select medicine.Name, medicine.Tax, medicine.Cost_Price/medicine.No_Of_Medicines_Per_Strip as cp, bill.Amount, bill.Rate, bill.Bill_Quantity,bill.Date from medicine inner join bill on bill.Medicine_Name = medicine.Name and bill.Batch_No = medicine.Batch_No  AND Date BETWEEN '"
            + str(self.startdate) + "' AND '" + str(self.toDate) + "'")
        self.result = self.dbcursor.fetchall()
        self.resultlen = self.dbcursor.rowcount

        self.df2 = pd.DataFrame(self.result)
        self.x = 0
        self.df1 = pd.DataFrame()
        if self.resultlen == 0:
            self.df2['Profit'] = 0
            self.df1 = self.df1.append({
                'Date': '',
                'Profit': 0
            },
                                       ignore_index=True)
        else:
            self.df2['Profit'] = (self.df2[3] -
                                  (self.df2[4] * self.df2[5] * 0.02 *
                                   self.df2[1])) - (self.df2[2] * self.df2[5])

            self.df2['Date'] = self.df2[6]

            self.df1 = self.df2.groupby('Date')['Profit'].sum()
            #self.df1 = DataFrame({'profit':self.df2.groupby(['Date']).sum()['Profit']}).reset_index()

        #for row in self.result:
        #   self.df1 = self.df1.append({'Date':self.result[1][self.x], 'Sale' : self.result[0][self.x]}, ignore_index=True)
        #if(self.resultlen==0):
        #   self.df1 = self.df1.append({'Date': '', 'Profit' : 0}, ignore_index=True)
        #else:
        #   while(self.x<self.resultlen):
        #      self.df1 = self.df1.append({'Date':self.result[self.x][1], 'Sale' : self.result[self.x][0]}, ignore_index=True)
        #     self.x = self.x+1
        #print(self.df1)
        self.bar1.get_tk_widget().grid(row=4,
                                       column=6,
                                       columnspan=3,
                                       sticky='W')

        self.ax1.patch.set_facecolor("#d7eaf5")
        #self.df1 = self.df1[['Date','Profit']].groupby('Date').sum()
        self.df1.plot(legend=True, ax=self.ax1, rot=30, marker="*")
        #self.ax1.plot(self.df1['Date'], self.df1['profit'], color='red')
        self.ax1.set_title(str(self.startdate) + " to " + str(self.toDate))

    def showGraph3(self):
        self.profit_on = self.profit_on_Cal.get_date()
        #self.dbcursor.execute("select Medicine_Name, sum(Bill_Quantity) from bill where Date = '" + str(self.profit_on) + "' group by Medicine_Name")
        #self.result = self.dbcursor.fetchall()
        self.profit = 0
        self.dbcursor.execute(
            "select medicine.Name, medicine.Tax, medicine.Cost_Price/medicine.No_Of_Medicines_Per_Strip as cp, bill.Amount, bill.Rate, bill.Bill_Quantity,bill.Date from medicine inner join bill on bill.Medicine_Name = medicine.Name and bill.Batch_No = medicine.Batch_No  AND Date = '"
            + str(self.profit_on) + "'")
        self.result = self.dbcursor.fetchall()
        self.resultlen = self.dbcursor.rowcount
        self.df1 = pd.DataFrame(self.result)

        if self.resultlen == 0:
            self.df1 = self.df1.append({
                'Item': '',
                'Profit': 0
            },
                                       ignore_index=True)
        else:

            self.df1['Item'] = self.df1[0]
            self.df1['profit'] = (self.df1[4] - self.df1[2]) * self.df1[5]

            self.profit = self.df1['profit'].sum()
            self.df1 = self.df1.groupby('Item')['profit'].sum()

        self.bar3.get_tk_widget().grid(row=4, column=3, columnspan=3)
        self.ax3.patch.set_facecolor("#d7eaf5")
        self.df1.plot(kind='bar', legend=True, ax=self.ax3, rot=30)
        self.ax3.set_title("total profit : " + str(self.profit))

    def pack_components(self):
        self.heading_label.grid(row=0,
                                column=0,
                                sticky='ew',
                                columnspan=10,
                                ipady=20,
                                ipadx=20,
                                pady=(0, 20))
        #self.backbtn.grid(row = 0, column = 6, ipadx = 15)
        self.homebtn.grid(row=0, column=7, ipadx=13)
        self.logoutbtn.grid(row=0, column=8, ipadx=10)

        self.sale_in_label.grid(row=3, column=1, sticky=W + E, ipady=5, pady=5)
        self.sale_in_combo.grid(row=3, column=2, pady=5, padx=30)
        self.sale_in_combo.current(1)
        self.sale_in_combo.bind("<<ComboboxSelected>>", self.graph1Changed)
        self.profit_on_label.grid(row=3,
                                  column=3,
                                  sticky=W + E,
                                  ipady=5,
                                  pady=10)
        self.profit_on_Cal.grid(row=3, column=4, sticky=W)
        self.profit_on_Cal.bind("<<DateEntrySelected>>", self.graph3Changed)
        #self.from_label.grid(row = 3, column = 6, ipady = 5, padx = 0, pady=5)
        self.From_Cal.grid(row=3, column=6, pady=5, sticky=E)
        self.From_Cal.bind("<<DateEntrySelected>>", self.graph1Changed)
        self.to_label.grid(row=3, column=7, ipady=5, padx=0, pady=5)
        self.To_Cal.grid(row=3, column=8, pady=0, sticky=W)
        self.To_Cal.bind("<<DateEntrySelected>>", self.graph1Changed)

    def logout(self):
        self.window.destroy()
        LoginWindow()

    def home(self):
        self.window.destroy()
        from Admin_Panel import AdminPanel
        AdminPanel(self.username)

    def graph1Changed(self, eventObject):

        self.sale_in = str(self.selected_sale_in.get())
        #self.bar2.get_tk_widget().destroy()
        self.ax2.clear()

        self.figure2 = plt.Figure(figsize=(4.5, 5.6), dpi=100)
        self.ax2 = self.figure2.add_subplot(111)
        self.bar2 = FigureCanvasTkAgg(self.figure2, self.window)

        self.ax1.clear()
        self.figure1 = plt.Figure(figsize=(4.5, 5.6), dpi=100)
        self.ax1 = self.figure1.add_subplot(111)
        self.bar1 = FigureCanvasTkAgg(self.figure1, self.window)

        self.showGraph1()
        self.showGraph2()

    def graph2Changed(self, eventObject):

        self.med_name = str(self.selected_med.get())
        self.cat_name = str(self.selected_cat.get())

        #self.bar1.get_tk_widget().destroy()
        self.ax1.clear()
        self.figure1 = plt.Figure(figsize=(6, 5), dpi=100)
        self.ax1 = self.figure1.add_subplot(111)
        self.bar1 = FigureCanvasTkAgg(self.figure1, self.window)
        self.showGraph2()

    def graph3Changed(self, eventObject):
        self.ax3.clear()
        self.figure3 = plt.Figure(figsize=(5, 5.6), dpi=100)
        self.ax3 = self.figure3.add_subplot(111)
        self.bar3 = FigureCanvasTkAgg(self.figure3, self.window)
        self.showGraph3()

    def run(self):
        self.window.geometry("1400x720")
        self.window.mainloop()


#ProfitPerDayAnalysis = ProfitPerDayAnalysis()
Exemplo n.º 19
0
class Dashboard(tk.Frame):
    def __init__(self, master, data_manager: DataManager,
                 exchange_rates_store: ExchangeRatesStore):
        super(Dashboard, self).__init__(master)
        self.data_manager = data_manager
        self.exchange_rates_store = exchange_rates_store

        self.acc_list = None
        self.cat_list = None
        self.add_trans_popup = None
        self.trans_table = None
        self.accounts_popup = None
        self.categories_popup = None
        self.overview = None

        self.chosen_accounts = set()
        self.chosen_categories = set()

        self.__create_widgets()

    def __update_acc_list(self):
        self.acc_list.update()
        if self.add_trans_popup:
            self.add_trans_popup.update()
        if self.accounts_popup:
            self.accounts_popup.update()

    def __update_cat_list(self):
        self.cat_list.update()
        if self.add_trans_popup:
            self.add_trans_popup.update()
        if self.categories_popup:
            self.categories_popup.update()

    def __on_context_change(self):
        if self.trans_table:
            self.trans_table.update()
        if self.overview:
            self.overview.update()

    def __on_acc_select(self, ids: tuple[int]):
        self.chosen_accounts = set(ids)
        self.__on_context_change()

    def __on_cat_select(self, ids: tuple[int]):
        self.chosen_categories = set(ids)
        self.__on_context_change()

    def __reset_accounts_popup(self, top):
        top.destroy()
        self.accounts_popup = None

    def __on_acc_delete(self):
        self.__update_acc_list()
        self.__on_context_change()

    def __open_accounts_popup(self):
        if not self.accounts_popup:
            top = tk.Toplevel(self)
            top.title("Accounts")
            top.geometry("500x200")
            top.resizable(False, False)
            top.protocol('WM_DELETE_WINDOW',
                         lambda *args: self.__reset_accounts_popup(top))
            self.accounts_popup = AccountsPopup(top,
                                                self.data_manager,
                                                self.exchange_rates_store,
                                                onadd=self.__update_acc_list,
                                                onupdate=self.__on_acc_delete,
                                                ondelete=self.__on_acc_delete)
            self.accounts_popup.pack(side=tk.LEFT, anchor="nw", padx=5, pady=5)

    def __reset_categories_popup(self, top):
        top.destroy()
        self.categories_popup = None

    def __on_cat_delete(self):
        self.__update_cat_list()
        self.__on_context_change()

    def __open_categories_popup(self):
        if not self.categories_popup:
            top = tk.Toplevel(self)
            top.title("Categories")
            top.geometry("500x200")
            top.resizable(False, False)
            top.protocol('WM_DELETE_WINDOW',
                         lambda *args: self.__reset_categories_popup(top))
            self.categories_popup = CategoriesPopup(
                top,
                self.data_manager,
                onadd=self.__update_cat_list,
                onupdate=self.__on_cat_delete,
                ondelete=self.__on_cat_delete)
            self.categories_popup.pack(side=tk.LEFT,
                                       anchor="nw",
                                       padx=5,
                                       pady=5)

    def __reset_add_trans_popup(self, top):
        top.destroy()
        self.add_trans_popup = None

    def __on_trans_add_callback(self):
        self.__on_context_change()
        if self.accounts_popup:
            self.accounts_popup.update()

    def __open_trans_add_popup(self):
        if not self.add_trans_popup:
            top = tk.Toplevel(self)
            top.title("Add transaction")
            top.geometry("300x260")
            top.resizable(False, False)
            top.protocol('WM_DELETE_WINDOW',
                         lambda *args: self.__reset_add_trans_popup(top))
            self.add_trans_popup = AddTransactionPopup(
                top, self.data_manager, self.exchange_rates_store,
                self.__on_trans_add_callback)
            self.add_trans_popup.pack()

    def __trans_data_source(self):
        min_d = datetime.fromisoformat(self.min_date_entry.get())
        max_d = datetime.fromisoformat(self.max_date_entry.get())
        return {
            t.id: t
            for acc in self.data_manager.accounts.values()
            for t in acc.transactions if acc.id in self.chosen_accounts and (
                not t.category or t.category.id in self.chosen_categories)
            and min_d <= t.date <= max_d
        }

    def __create_lists(self, frame):
        def acc_data_source():
            return {
                _id: acc.name
                for _id, acc in self.data_manager.accounts.items()
            }

        def cat_data_source():
            return {
                _id: cat.name
                for _id, cat in self.data_manager.categories.items()
            }

        wrapper = tk.Frame(frame)

        acc_wrapper = tk.Frame(wrapper)
        label = tk.Label(acc_wrapper,
                         text="Accounts",
                         width=Account.NAME_MAX + 2,
                         anchor="w",
                         relief=tk.GROOVE)
        label.pack()
        self.acc_list = Multiselect(acc_wrapper,
                                    acc_data_source,
                                    self.__on_acc_select,
                                    width=Account.NAME_MAX)
        self.acc_list.pack()
        acc_wrapper.pack(side=tk.LEFT)

        cat_wrapper = tk.Frame(wrapper)
        label = tk.Label(cat_wrapper,
                         text="Categories",
                         width=Category.NAME_MAX + 2,
                         anchor="w",
                         relief=tk.GROOVE)
        label.pack()
        self.cat_list = Multiselect(cat_wrapper,
                                    cat_data_source,
                                    self.__on_cat_select,
                                    width=Category.NAME_MAX)
        self.cat_list.pack()
        cat_wrapper.pack(side=tk.LEFT)

        wrapper.pack()

    def __create_navbar(self, frame):
        pack_config = {"side": tk.LEFT, "padx": 2, "anchor": "n"}
        date_entry_config = {
            "width": 12,
            "selectmode": "day",
            "locale": "en_US",
            "date_pattern": "yyyy-mm-dd",
            "showweeknumbers": False
        }

        wrapper = tk.Frame(frame)

        lbl = tk.Label(wrapper, text="DATE MIN: ", relief=tk.GROOVE)
        lbl.pack(**pack_config)

        self.min_date_entry = DateEntry(wrapper,
                                        **date_entry_config,
                                        year=2020,
                                        month=1,
                                        day=1)
        self.min_date_entry.bind("<<DateEntrySelected>>",
                                 lambda *args: self.__on_context_change())
        self.min_date_entry.pack(**pack_config)

        lbl = tk.Label(wrapper, text="DATE MAX: ", relief=tk.GROOVE)
        lbl.pack(**pack_config)

        self.max_date_entry = DateEntry(wrapper, **date_entry_config)
        self.max_date_entry.bind("<<DateEntrySelected>>",
                                 lambda *args: self.__on_context_change())
        self.max_date_entry.pack(**pack_config)

        btn = tk.Button(wrapper,
                        text="Accounts",
                        command=self.__open_accounts_popup)
        btn.pack(**pack_config)

        btn = tk.Button(wrapper,
                        text="Categories",
                        command=self.__open_categories_popup)
        btn.pack(**pack_config)

        btn = tk.Button(wrapper,
                        text="Add transaction",
                        command=self.__open_trans_add_popup)
        btn.pack(**pack_config)

        wrapper.pack(fill=tk.Y)

    def __create_widgets(self):
        frame = tk.Frame()

        wrapper1 = tk.Frame(frame)
        self.__create_lists(wrapper1)
        wrapper1.pack(side=tk.LEFT, anchor="nw")

        wrapper2 = tk.Frame(frame)
        self.__create_navbar(wrapper2)
        self.overview = Overview(wrapper2, self.exchange_rates_store,
                                 self.__trans_data_source)
        self.overview.pack(side=tk.TOP)
        wrapper2.pack(side=tk.LEFT)

        frame.pack(fill=tk.X, padx=10, pady=10)

        wrapper3 = tk.Frame()
        labelframe = tk.LabelFrame(wrapper3, text="Transactions", font=10)
        self.trans_table = TransactionTable(
            labelframe, self.__trans_data_source,
            lambda *args: self.__on_context_change())
        self.trans_table.pack(fill=tk.BOTH, expand=1)
        labelframe.pack(fill=tk.BOTH, expand="yes")
        wrapper3.pack(fill=tk.BOTH, expand="yes", padx=10, pady=10)
Exemplo n.º 20
0
class DiplomaFrame(tk.Frame):
    
    #this holds the info needed for the diploma, it holds all info for the diploma in a map
    #this frame will pass all the info onto the dip_model
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        label = tk.Label(self, text="Diploma Info")
        label.grid(column = 2, row = 0)
        button = tk.Button(self, text="< Back",
                           command=lambda: controller.showFrame("StartPage", controller.model))
        button.grid(column = 1, row = 19)

        dipDict = {'first': "", 'middle': "", 'last': "", 'degree': "", 'curriculum': "", 'dateDegree': "", 'identificationTail': ""
        ,'birth_date': "", 'attend_date': "", 'email': "", 'phone': "", 'description': "", 'returned': "", 'payment': "", 'address':""}

        self.first_name = tk.StringVar()
        self.middle_name = tk.StringVar()
        self.last_name = tk.StringVar()

        self.degree = tk.StringVar()
        self.curriculum = tk.StringVar()
        self.date_degree = datetime.date(2000, 1, 1)
        self.id_tail = tk.StringVar()
        self.birth_date = datetime.date(2000, 1, 1)
        self.start_date = datetime.date(2000, 1, 1)
        self.end_date = datetime.date(2000, 1, 1)
        self.email = tk.StringVar()
        self.phone = tk.StringVar()
        self.description = tk.StringVar()
        self.dip_returned = bool
        self.payment = tk.StringVar()
        self.address = tk.StringVar()

        self.first_name_label = tk.Label(self, text="First Name:", anchor = "w")
        self.first_name_entry = tk.Entry(self, textvariable = self.first_name)
        self.first_name_label.grid(column = 1, row = 2, padx=(10,5))
        self.first_name_entry.grid(column=2, row = 2)

        self.middle_name_label = tk.Label(self, text="Middle Name:")
        self.middle_name_entry = tk.Entry(self, textvariable = self.middle_name)
        self.middle_name_label.grid(column = 1, row = 3, padx=(10,5))
        self.middle_name_entry.grid(column=2, row = 3)

        self.last_name_label = tk.Label(self, text="Last Name:")
        self.last_name_entry = tk.Entry(self, textvariable = self.last_name)
        self.last_name_label.grid(column = 1, row = 4, padx=(10,5))
        self.last_name_entry.grid(column=2, row = 4)

        self.degree_label = tk.Label(self, text="Degree:")
        self.degree_entry = tk.Entry(self, textvariable = self.degree)
        self.degree_label.grid(column = 1, row = 5, padx=(10,5))
        self.degree_entry.grid(column=2, row = 5)

        self.curriculum_label = tk.Label(self, text="Curriculum:")
        self.curriculum_entry = tk.Entry(self, textvariable = self.curriculum)
        self.curriculum_label.grid(column = 1, row = 6, padx=(10,5))
        self.curriculum_entry.grid(column=2, row = 6)

        self.date_degree_label = tk.Label(self, text="Date of Degree:")
        self.date_degree_cal = DateEntry(self)
        self.date_degree_cal.bind("<<DateEntrySelected>>", self.setDateDegree())
        self.date_degree_label.grid(column=1, row = 7)
        self.date_degree_cal.grid(column = 2, row = 7)

        self.id_label_1 = tk.Label(self, text="Last 4 Digits of SSN:")
        self.id_label_2 = tk.Label(self, text = "or Student ID#")
        self.id_entry = tk.Entry(self, textvariable = self.id_tail)
        self.id_label_1.grid(column = 1, row = 8, padx=(10,5))
        self.id_label_2.grid(column = 1, row = 9)
        self.id_entry.grid(column=2, row = 8)

        self.birth_date_label = tk.Label(self, text="Date of Birth:")
        self.birth_date_cal = DateEntry(self)
        self.birth_date_cal.bind("<<DateEntrySelected>>", self.setBirthDate())
        self.birth_date_label.grid(column=1, row = 10)
        self.birth_date_cal.grid(column = 2, row = 10)

        self.start_date_label = tk.Label(self, text="Attendance Start Date")
        self.start_date_cal = DateEntry(self, width = 12)
        self.start_date_cal.bind("<<DateEntrySelected>>", self.setStartDate())
        self.start_date_label.grid(column=1, row = 11)
        self.start_date_cal.grid(column = 2, row = 11)

        self.end_date_label = tk.Label(self, text="Attendance End Date")
        self.end_date_cal = DateEntry(self, width = 12)
        self.end_date_cal.bind("<<DateEntrySelected>>", self.setEndDate())
        self.end_date_label.grid(column=1, row = 12)
        self.end_date_cal.grid(column = 2, row = 12)

        self.email_label = tk.Label(self, text="Email:")
        self.email_entry = tk.Entry(self, textvariable = self.email)
        self.email_label.grid(column = 1, row = 13, padx=(10,5))
        self.email_entry.grid(column=2, row = 13)
        
        self.phone_label = tk.Label(self, text="Phone #:")
        self.phone_entry = tk.Entry(self, textvariable = self.phone)
        self.phone_label.grid(column = 1, row = 14, padx=(10,5))
        self.phone_entry.grid(column=2, row = 14)

        self.description_label = tk.Label(self, text="Reason for Request:")
        self.description_entry = tk.Entry(self, textvariable = self.description)
        self.description_label.grid(column = 1, row = 15, padx=(10,5))
        self.description_entry.grid(column=2, row = 15)

        self.temp_int = tk.IntVar()

        self.returned_label = tk.Label(self, text= "Diploma returned?")
        self.returned_label.grid(column = 1, row = 16)
        self.return_true_dip = tk.Radiobutton(self, text="Yes", value=1, variable=self.temp_int, command = self.setReturned())
        self.return_false_dip = tk.Radiobutton(self, text="No", value=0,  variable=self.temp_int, command = self.setReturned())
        self.return_true_dip.grid(column = 2, row = 16)
        self.return_false_dip.grid(column = 3, row = 16)

        self.pay_label = tk.Label(self, text="Payment Type ($50):")
        self.pay_entry = tk.Entry(self, textvariable = self.payment)
        self.pay_label.grid(column = 1, row = 17, padx=(10,5))
        self.pay_entry.grid(column=2, row = 17)

        self.address_label = tk.Label(self, text="Address:")
        self.address_entry = tk.Entry(self, textvariable = self.address)
        self.address_label.grid(column = 1, row = 18, padx=(10,5))
        self.address_entry.grid(column=2, row = 18)

        self.enter_button = tk.Button(self, text="Enter >",
                           command=lambda: self.updateDipModel(dipDict))
        self.enter_button.grid(column = 2, row = 19)

    def setDateDegree(self):
        self.date_degree = self.date_degree_cal.get_date()
        print (self.date_degree)

    def setBirthDate(self):
        self.birth_date = self.birth_date_cal.get_date()

    def setStartDate(self):
        self.start_date = self.start_date_cal.get_date()
    
    def setEndDate(self):
        self.end_date = self.end_date_cal.get_date()

    def setReturned(self):
        if self.temp_int == 1:
            self.dip_returned = True
        else:
            self.dip_returned = False
 
    def updateDipModel(self, dict):

        dict['first'] = self.first_name.get()
        dict['middle'] = self.middle_name.get()
        dict['last'] = self.last_name.get()
        dict['degree'] = self.degree.get()
        dict['curriculum'] = self.curriculum.get()
        dict['dateDegree'] = self.date_degree_cal.get()
        dict['identificationTail'] = self.id_tail.get()
        dict['birth_date'] = self.birth_date_cal.get()
        dict['attend_date'] = [self.start_date_cal.get(), self.end_date_cal.get()]
        dict['email'] = self.email.get()
        dict['phone'] = self.phone.get()
        dict['description'] = self.description.get()
        dict['returned'] = self.dip_returned
        dict['payment'] = self.payment.get()
        dict['address'] = self.address.get()

        self.controller.dip_model.setInfo(dict)
Exemplo n.º 21
0
class EventsWindow:
    def __init__(self):
        self.win = Tk()

        self.canvas = Canvas(self.win, width=600, height=500, bg='white')
        self.canvas.pack(expand=YES, fill=BOTH)

        width = self.win.winfo_screenwidth()
        height = self.win.winfo_screenheight()

        x = int(width / 2 - 600 / 2)
        y = int(height / 2 - 500 / 2)

        str1 = "600x500+" + str(x) + "+" + str(y)

        self.win.geometry(str1)
        self.win.resizable(width=False, height=False)
        self.win.title("Events and Bindings")

    def add_frame(self):
        self.frame = Frame(self.win, height=400, width=450)
        self.frame.place(x=80, y=50)

        x, y = 70, 20

        self.label = Label(self.frame, text="Events and Bindings")
        self.label.config(font=('Courier', 20, 'bold'))
        self.label.place(x=x + 10, y=y + 50)

        self.label = Label(self.frame, text='Enter name')
        self.label.config(font=('Courier', 12, 'bold'))
        self.label.place(x=50, y=y + 130)

        self.name = Entry(self.frame, font='Courier 12')
        self.name.place(x=200, y=y + 130)

        self.name.bind('<KeyRelease>', self.keyup)

        # calendar in tkinter
        self.label = Label(self.frame, text='Select DOB')
        self.label.config(font=('Courier', 12, 'bold'))
        self.label.place(x=50, y=y + 160)

        self.dob = DateEntry(self.frame,
                             font=('Courier', 12, 'bold'),
                             bg='darkblue',
                             fg='white',
                             borderwidth=2,
                             command=self.dates)
        self.dob.place(x=200, y=y + 160)

        #on date change listener
        self.dob.bind('<<DateEntrySelected>>', self.dates)

        # radio buttons
        self.var = StringVar()
        self.label = Label(self.frame, text='Select Gender')
        self.label.config(font=('Courier', 12, 'bold'))
        self.label.place(x=50, y=y + 190)

        self.male = Radiobutton(self.frame,
                                variable=self.var,
                                font='Courier 12',
                                text='Male',
                                value='Male',
                                command=self.sel)
        self.male.place(x=200, y=y + 190)

        self.female = Radiobutton(self.frame,
                                  variable=self.var,
                                  font='Courier 12',
                                  text='FeMale',
                                  value='FeMale',
                                  command=self.sel)
        self.female.place(x=280, y=y + 190)

        # Drop down menu
        OPTIONS = ['Jalandhar', 'Amritsar', 'Phagwara']

        self.variable = StringVar(self.win)
        self.variable.set(OPTIONS[0])

        self.label = Label(self.frame, text='Select City')
        self.label.config(font=('Courier', 12, 'bold'))
        self.label.place(x=50, y=y + 220)

        self.city = OptionMenu(self.frame,
                               self.variable,
                               *OPTIONS,
                               command=self.dropdown)
        self.city.place(x=200, y=y + 220)

        self.win.mainloop()

    def keyup(self, value, *args):
        print(self.name.get())

    def dates(self, value, *args):
        print(self.dob.get_date())

    def sel(self):
        print(self.var.get())

    def dropdown(self, value, *args):
        print(self.variable.get())
Exemplo n.º 22
0
class Form(Toplevel):
    def __init__(self, master, event, new=False):
        Toplevel.__init__(self, master)
        self.minsize(410, 402)
        if master.winfo_ismapped():
            self.transient(master)
        self.protocol('WM_DELETE_WINDOW', self.cancel)

        self._only_nb = self.register(only_nb)

        self.event = event
        if new:
            self.title(_('New Event'))
        else:
            self.title(_('Edit Event'))
        self._new = new
        self._task = BooleanVar(self, bool(event['Task']))
        self._whole_day = BooleanVar(self, event['WholeDay'])

        # --- style
        style = Style(self)
        active_bg = style.lookup('TEntry', 'selectbackground', ('focus', ))

        self.alarms = []

        notebook = Notebook(self)
        notebook.pack(fill='both', expand=True)
        Button(self, text=_('Ok'), command=self.ok).pack(pady=(10, 6), padx=4)

        # --- event settings
        frame_event = Frame(notebook)
        notebook.add(frame_event, text=_('Event'), sticky='eswn', padding=4)
        frame_event.columnconfigure(1, weight=1)
        frame_event.rowconfigure(5, weight=1)

        self.img_moins = PhotoImage(master=self, file=IM_DEL)
        self.img_bell = PhotoImage(master=self, file=IM_BELL)
        Label(frame_event, text=_('Summary')).grid(row=0,
                                                   column=0,
                                                   padx=4,
                                                   pady=6,
                                                   sticky='e')
        Label(frame_event, text=_('Place')).grid(row=1,
                                                 column=0,
                                                 padx=4,
                                                 pady=6,
                                                 sticky='e')
        Label(frame_event, text=_('Start')).grid(row=2,
                                                 column=0,
                                                 padx=4,
                                                 pady=6,
                                                 sticky='e')
        self._end_label = Label(frame_event, text=_('End'))
        self._end_label.grid(row=3, column=0, padx=4, pady=6, sticky='e')
        frame_task = Frame(frame_event)
        frame_task.grid(row=4, column=1, padx=4, pady=6, sticky='w')
        Label(frame_event, text=_('Description')).grid(row=5,
                                                       column=0,
                                                       padx=4,
                                                       pady=6,
                                                       sticky='e')
        Label(frame_event, text=_('Category')).grid(row=6,
                                                    column=0,
                                                    padx=4,
                                                    pady=6,
                                                    sticky='e')
        Button(frame_event,
               image=self.img_bell,
               command=self.add_reminder,
               padding=0).grid(row=7, column=0, padx=4, pady=6, sticky='en')

        self.summary = Entry(frame_event, width=35)
        self.summary.insert(0, self.event['Summary'])
        self.summary.grid(row=0, column=1, padx=4, pady=6, sticky='ew')
        self.place = Entry(frame_event, width=35)
        self.place.insert(0, self.event['Place'])
        self.place.grid(row=1, column=1, padx=4, pady=6, sticky='ew')
        frame_start = Frame(frame_event)
        frame_start.grid(row=2, column=1, padx=4, pady=6, sticky='w')
        frame_end = Frame(frame_event)
        frame_end.grid(row=3, column=1, padx=4, pady=6, sticky='w')
        txt_frame = Frame(frame_event,
                          style='txt.TFrame',
                          border=1,
                          relief='sunken')
        self.desc = Text(txt_frame,
                         width=35,
                         height=4,
                         highlightthickness=0,
                         relief='flat',
                         selectbackground=active_bg)
        self.desc.insert('1.0', self.event['Description'])
        self.desc.pack(fill='both', expand=True)
        txt_frame.grid(row=5, column=1, padx=4, pady=6, sticky='ewsn')
        cats = list(CONFIG.options('Categories'))
        width = max([len(cat) for cat in cats])
        self.category = Combobox(frame_event,
                                 width=width + 2,
                                 values=cats,
                                 state='readonly')
        self.category.set(event['Category'])
        self.category.grid(row=6, column=1, padx=4, pady=6, sticky='w')
        self.frame_alarms = Frame(frame_event)
        self.frame_alarms.grid(row=7, column=1, sticky='w')

        # --- *--- task
        Checkbutton(frame_task,
                    text=_('Task'),
                    command=self._change_label,
                    variable=self._task).pack(side='left')

        self.task_progress = Combobox(frame_task,
                                      state='readonly',
                                      width=9,
                                      values=(_('Pending'), _('In Progress'),
                                              _('Completed'), _('Cancelled')))
        self.task_progress.pack(side='left', padx=(8, 4))
        self.in_progress = Combobox(
            frame_task,
            state='readonly',
            width=5,
            values=['{}%'.format(i) for i in range(0, 110, 10)])
        self.in_progress.pack(side='left', padx=4)
        if not event['Task']:
            self.task_progress.set(_('Pending'))
            self.in_progress.set('0%')
        elif '%' in event['Task']:
            self.task_progress.set(_('In Progress'))
            self.in_progress.set(event['Task'])
        else:
            self.task_progress.set(_(event['Task']))
            self.in_progress.set('0%')

        # calendar settings
        prop = {
            op: CONFIG.get('Calendar', op)
            for op in CONFIG.options('Calendar')
        }
        prop['font'] = "Liberation\ Sans 9"
        prop.update(selectforeground='white', selectbackground=active_bg)
        locale = CONFIG.get('General', 'locale')

        # --- *--- start date
        self.start_date = self.event['Start']
        self.start_entry = DateEntry(frame_start,
                                     locale=locale,
                                     width=10,
                                     justify='center',
                                     year=self.start_date.year,
                                     month=self.start_date.month,
                                     day=self.start_date.day,
                                     **prop)

        self.start_hour = Combobox(frame_start,
                                   width=3,
                                   justify='center',
                                   state='readonly',
                                   exportselection=False,
                                   values=['%02d' % i for i in range(24)])
        self.start_hour.set('%02d' % self.start_date.hour)
        self.start_min = Combobox(frame_start,
                                  width=3,
                                  justify='center',
                                  state='readonly',
                                  exportselection=False,
                                  values=['%02d' % i for i in range(0, 60, 5)])
        self.start_min.set('%02d' % self.start_date.minute)
        self.start_entry.pack(side='left', padx=(0, 18))
        self.start_hour.pack(side='left', padx=(4, 0))
        self.start_date = self.start_date.date()
        Label(frame_start, text=':').pack(side='left')
        self.start_min.pack(side='left', padx=(0, 4))
        Checkbutton(frame_start,
                    text=_("whole day"),
                    variable=self._whole_day,
                    command=self._toggle_whole_day).pack(side='left', padx=4)

        # --- *--- end date
        self.end_date = self.event['End']
        self.end_entry = DateEntry(frame_end,
                                   justify='center',
                                   locale=locale,
                                   width=10,
                                   year=self.end_date.year,
                                   month=self.end_date.month,
                                   day=self.end_date.day,
                                   **prop)

        self.end_hour = Combobox(frame_end,
                                 width=3,
                                 justify='center',
                                 state='readonly',
                                 exportselection=False,
                                 values=['%02d' % i for i in range(24)])
        self.end_hour.set('%02d' % self.end_date.hour)
        self.end_min = Combobox(frame_end,
                                width=3,
                                justify='center',
                                state='readonly',
                                exportselection=False,
                                values=['%02d' % i for i in range(0, 60, 5)])
        self.end_min.set('%02d' % self.end_date.minute)
        self.end_entry.pack(side='left', padx=(0, 18))

        self.end_hour.pack(side='left', padx=(4, 0))
        Label(frame_end, text=':').pack(side='left')
        self.end_min.pack(side='left', padx=(0, 4))
        self.end_date = self.end_date.date()

        for date in self.event['Reminders'].values():
            self.add_reminder(date)

        self._toggle_whole_day()

        # --- repetition settings
        frame_rep = Frame(notebook)
        notebook.add(frame_rep, text=_('Repetition'), padding=4, sticky='eswn')
        frame_rep.columnconfigure(0, weight=1)
        frame_rep.columnconfigure(1, weight=1)
        frame_rep.rowconfigure(1, weight=1)
        self._repeat = BooleanVar(self, bool(self.event['Repeat']))
        repeat = {
            'Frequency': 'year',
            'Limit': 'always',
            'NbTimes': 1,
            'EndDate': (datetime.now() + timedelta(days=1)).date(),
            'WeekDays': [self.start_date.isocalendar()[2] - 1]
        }
        repeat.update(self.event['Repeat'])

        self._repeat_freq = StringVar(self, repeat['Frequency'])
        Checkbutton(frame_rep,
                    text=_('Repeat event'),
                    variable=self._repeat,
                    command=self._toggle_rep).grid(row=0,
                                                   column=0,
                                                   columnspan=2,
                                                   padx=4,
                                                   pady=6,
                                                   sticky='w')
        # --- *--- Frequency
        frame_freq = LabelFrame(frame_rep, text=_('Frequency'))
        frame_freq.grid(row=1, column=0, sticky='eswn', padx=(0, 3))
        self._lfreq = Label(frame_freq, text=_('Every:'))
        self._lfreq.grid(row=0, column=0, padx=4, pady=2, sticky='e')

        self._freqs = []
        for i, val in enumerate(['Year', 'Month', 'Week']):
            r = Radiobutton(frame_freq,
                            text=_(val),
                            variable=self._repeat_freq,
                            value=val.lower(),
                            command=self._toggle_wd)
            r.grid(row=i, column=1, padx=4, pady=2, sticky='nw')
            self._freqs.append(r)

        frame_days = Frame(frame_freq)
        frame_days.grid(row=2, column=2, padx=4, pady=2, sticky='nw')
        self._week_days = []
        days = get_day_names("wide", locale=locale)
        days = [days[i] for i in range(7)]
        for day in days:
            ch = Checkbutton(frame_days, text=day)
            ch.pack(anchor='w')
            self._week_days.append(ch)

        for d in repeat['WeekDays']:
            self._week_days[int(d)].state(('selected', ))

        # --- *--- Limit
        frame_lim = LabelFrame(frame_rep, text=_('Limit'))
        frame_lim.grid(row=1, column=1, sticky='eswn', padx=(3, 0))
        frame_lim.grid(row=1, column=1, sticky='eswn', padx=(3, 0))
        self._repeat_lim = StringVar(self, repeat['Limit'])

        # always
        r1 = Radiobutton(frame_lim,
                         text=_('Always'),
                         value='always',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r1.grid(row=0, column=0, sticky='w')
        # until
        r2 = Radiobutton(frame_lim,
                         text=_('Until'),
                         value='until',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r2.grid(row=1, column=0, sticky='w')
        until_date = repeat['EndDate']
        self.until_entry = DateEntry(frame_lim,
                                     width=10,
                                     justify='center',
                                     locale=locale,
                                     year=until_date.year,
                                     month=until_date.month,
                                     day=until_date.day,
                                     **prop)

        self.until_entry.grid(row=1,
                              column=1,
                              columnspan=2,
                              sticky='w',
                              padx=(4, 10),
                              pady=2)

        # after
        r3 = Radiobutton(frame_lim,
                         text=_('After'),
                         value='after',
                         variable=self._repeat_lim,
                         command=self._toggle_lim)
        r3.grid(row=2, column=0, sticky='w')
        frame_after = Frame(frame_lim,
                            style='txt.TFrame',
                            relief='sunken',
                            border=1)
        self.s_after = Spinbox(frame_after,
                               from_=0,
                               to=100,
                               width=3,
                               justify='center',
                               relief='flat',
                               highlightthickness=0,
                               validate='key',
                               validatecommand=(self._only_nb, '%P'),
                               disabledbackground='white')
        self.s_after.pack()
        self.s_after.delete(0, 'end')
        self.s_after.insert(0, str(repeat['NbTimes']))
        frame_after.grid(row=2, column=1, padx=4, pady=2, sticky='w')
        self._llim = Label(frame_lim, text=_('times'))
        self._llim.grid(row=2, column=2, padx=0, pady=2, sticky='w')

        self._rb_lim = [r1, r2, r3]

        self._toggle_rep()
        self._change_label()

        # --- bindings
        self.bind('<Configure>')
        self.task_progress.bind('<<ComboboxSelected>>',
                                self._toggle_in_progress)
        self.start_entry.bind('<<DateEntrySelected>>', self._select_start)
        self.end_entry.bind('<<DateEntrySelected>>', self._select_end)
        self.start_hour.bind("<<ComboboxSelected>>", self._select_start_hour)
        self.start_min.bind("<<ComboboxSelected>>", self._select_start_min)
        self.end_min.bind("<<ComboboxSelected>>", self._select_end_time)
        self.end_hour.bind("<<ComboboxSelected>>", self._select_end_time)
        self.bind_class("TCombobox",
                        "<<ComboboxSelected>>",
                        self.__clear_selection,
                        add=True)

        # self.wait_visibility(self)
        # self.grab_set()
        self.summary.focus_set()

    def _toggle_lim(self, val=True):
        if val:
            val = self._repeat_lim.get()

        if val == 'until':
            self.s_after.configure(state='disabled')
            self._llim.state(('disabled', ))
            self.until_entry.state(('!disabled', ))
        elif val == 'after':
            self._llim.state(('!disabled', ))
            self.s_after.configure(state='normal')
            self.until_entry.state(('disabled', ))
        else:
            self.s_after.configure(state='disabled')
            self._llim.state(('disabled', ))
            self.until_entry.state(('disabled', ))

    def _toggle_rep(self):
        rep = self._repeat.get()
        state = state = '!' * int(rep) + "disabled"
        for r in self._freqs:
            r.state((state, ))
        for r in self._rb_lim:
            r.state((state, ))
        self._lfreq.state((state, ))
        self._toggle_wd(rep)
        self._toggle_lim(rep)

    def _toggle_wd(self, val=True):
        if val:
            val = self._repeat_freq.get()
        state = '!' * int(val == 'week') + "disabled"
        for ch in self._week_days:
            ch.state((state, ))

    def _toggle_whole_day(self):
        if self._whole_day.get():
            self.start_min.set('00')
            self.start_hour.set('00')
            self.end_min.set('59')
            self.end_hour.set('23')
            self.start_min.state(("disabled", ))
            self.start_hour.state(("disabled", ))
            self.end_min.state(("disabled", ))
            self.end_hour.state(("disabled", ))
        else:
            self.start_min.state(("!disabled", ))
            self.start_hour.state(("!disabled", ))
            self.end_min.state(("!disabled", ))
            self.end_hour.state(("!disabled", ))

    def _toggle_in_progress(self, event=None):
        if self.task_progress.get() == _('In Progress'):
            self.in_progress.state(('!disabled', ))
        else:
            if self.task_progress.get() == _('Completed'):
                self.in_progress.set('100%')
            self.in_progress.state(('disabled', ))

    def _change_label(self):
        if self._task.get():
            self.task_progress.state(('!disabled', ))
            self._toggle_in_progress()
            self._end_label.configure(text=_('Deadline'))
        else:
            self.task_progress.state(('disabled', ))
            self.in_progress.state(('disabled', ))
            self._end_label.configure(text=_('End'))

    def _on_move(self, event):
        self.start_cal.withdraw()
        self.end_cal.withdraw()
        self.until_cal.withdraw()

    @staticmethod
    def __clear_selection(event):
        combo = event.widget
        combo.selection_clear()

    def _select_start(self, event=None):
        dt = self.start_entry.get_date() - self.start_date
        self.end_date = self.end_date + dt
        self.end_entry.set_date(self.end_date)
        self.start_date = self.start_entry.get_date()

    def _select_end(self, event=None):
        self.end_date = self.end_entry.get_date()
        start = self.start_entry.get_date()
        if start >= self.end_date:
            self.start_date = self.end_date
            self.start_entry.set_date(self.end_date)
            start_time = time(int(self.start_hour.get()),
                              int(self.start_min.get()))
            end_time = time(int(self.start_hour.get()),
                            int(self.end_min.get()))
            if start_time > end_time:
                self.start_hour.set(self.end_hour.get())
                self.start_min.set(self.end_min.get())

    def _select_start_hour(self, event):
        h = int(self.start_hour.get())
        self.end_hour.set('%02d' % ((h + 1) % 24))

    def _select_start_min(self, event):
        m = int(self.start_min.get())
        self.end_min.set('%02d' % m)

    def _select_end_time(self, event):
        if self.start_entry.get() == self.end_entry.get():
            start_time = time(int(self.start_hour.get()),
                              int(self.start_min.get()))
            end_time = time(int(self.end_hour.get()), int(self.end_min.get()))
            if start_time > end_time:
                self.start_hour.set(self.end_hour.get())
                self.start_min.set(self.end_min.get())

    def add_reminder(self, date=None):
        def remove():
            self.alarms.remove((when, what))
            rem.destroy()

        rem = Frame(self.frame_alarms)
        frame_when = Frame(rem, style='txt.TFrame', relief='sunken', border=1)
        when = Spinbox(frame_when,
                       from_=0,
                       to=59,
                       width=3,
                       justify='center',
                       relief='flat',
                       highlightthickness=0,
                       validate='key',
                       validatecommand=(self._only_nb, '%P'))
        when.pack()
        when.delete(0, 'end')
        what = Combobox(rem,
                        width=8,
                        state='readonly',
                        values=(_('minutes'), _('hours'), _('days')))

        if date:
            hour = int(self.start_hour.get())
            minute = int(self.start_min.get())
            dt = datetime.combine(self.start_entry.get_date(),
                                  time(hour=hour, minute=minute)) - date
            if dt.days > 0:
                when.insert(0, str(dt.days))
                what.set(_('days'))
            else:
                h, m, s = str(dt).split(':')
                if h != "0":
                    when.insert(0, h)
                    what.set(_('hours'))
                else:
                    when.insert(0, str(int(m)))
                    what.set(_('minutes'))
        else:
            when.insert(0, '15')
            what.set(_('minutes'))

        self.alarms.append((when, what))

        Label(rem, text=_('Reminder:')).pack(side='left', padx=4, pady=4)
        frame_when.pack(side='left', pady=4, padx=4)
        what.pack(side='left', pady=4, padx=4)
        Button(rem, image=self.img_moins, padding=0,
               command=remove).pack(side='left', padx=4, pady=4)
        rem.pack()

    def ok(self):
        summary = self.summary.get()
        if not summary:
            showerror(_("Error"),
                      _("The field 'Summary' cannot be empty."),
                      parent=self)
            return

        self.event['Summary'] = summary
        self.event['Place'] = self.place.get()
        self.event['Start'] = "%s %s:%s" % (
            self.start_entry.get_date().strftime("%Y-%m-%d"),
            self.start_hour.get(), self.start_min.get())
        self.event['End'] = "%s %s:%s" % (self.end_entry.get_date().strftime(
            "%Y-%m-%d"), self.end_hour.get(), self.end_min.get())
        self.event['Description'] = self.desc.get('1.0', 'end')
        self.event['Category'] = self.category.get()
        if not self._task.get():
            self.event['Task'] = False
        else:
            prog = self.task_progress.get()
            if prog == _('In Progress'):
                self.event['Task'] = self.in_progress.get()
            else:
                self.event['Task'] = TASK_REV_TRANSLATION[prog]

        self.event["WholeDay"] = self._whole_day.get()

        if not self._repeat.get():
            self.event['Repeat'] = {}
        else:
            days = []
            for i in range(7):
                if "selected" in self._week_days[i].state():
                    days.append(i)
            repeat = {
                'Frequency': self._repeat_freq.get(),
                'Limit': self._repeat_lim.get(),
                'NbTimes': int(self.s_after.get()),
                'EndDate': self.until_entry.get_date(),
                'WeekDays': days
            }
            self.event['Repeat'] = repeat

        self.event.reminder_remove_all()
        for when, what in self.alarms:
            dt = int(when.get())
            unit = FREQ_REV_TRANSLATION[what.get()]
            date = self.event['Start'] - timedelta(**{unit: dt})
            self.event.reminder_add(date)

        if self._new:
            self.master.event_add(self.event)
        else:
            self.master.event_configure(self.event.iid)
        self.destroy()

    def cancel(self):
        if not self._new:
            self.master.widgets['Calendar'].add_event(self.event)
        self.destroy()
Exemplo n.º 23
0
class Calendar(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, highlightbackground="black", highlightcolor="black", highlightthickness=2)

        self.day_name = StringVar()

        self.__calendar()

    def __calendar(self):
        self.calendar_title_label = Label(self,
                                          text="Fecha",
                                          anchor="center",
                                          relief="groove")

        self.calendar_title_label.grid(row=0,
                                       column=0,
                                       padx=(0, CELL_PADDING),
                                       pady=CELL_PADDING,
                                       ipadx=CELL_MARGIN,
                                       ipady=CELL_MARGIN,
                                       sticky=W + E + N + S)
        self.calendar_date_entry = DateEntry(self,
                                        width=5,
                                        justify="center",
                                        background='darkblue',
                                        foreground='white',
                                        borderwidth=0,
                                        day=datetime.now().day - 1,
                                        month=datetime.now().month,
                                        year=datetime.now().year,
                                        locale="es_ES",
                                        date_pattern="dd/mm/yyyy")
        self.calendar_date_entry.grid(row=1,
                                 column=0,
                                 padx=(0, CELL_PADDING),
                                 pady=CELL_PADDING,
                                 ipadx=CELL_MARGIN,
                                 ipady=CELL_MARGIN,
                                 sticky=W + E + N + S)
        self.calendar_date_entry.bind("<<DateEntrySelected>>", self.__print_name_day)

        self.calendar_title_label = Label(self,
                                          text="Día",
                                          anchor="center",
                                          relief="groove")

        self.calendar_title_label.grid(row=0,
                                       column=1,
                                       padx=(0, CELL_PADDING),
                                       pady=CELL_PADDING,
                                       ipadx=CELL_MARGIN,
                                       ipady=CELL_MARGIN,
                                       sticky=W + E + N + S)

        self.calendar_label = Label(self,
                                    anchor="center",
                                    textvariable=self.day_name,
                                    relief="groove")
        self.calendar_label.grid(row=1,
                                 column=1,
                                 padx=(0, CELL_PADDING),
                                 pady=CELL_PADDING,
                                 ipadx=CELL_MARGIN,
                                 ipady=CELL_MARGIN,
                                 sticky=W + E + N + S)

    def __print_name_day(self, event):
        w = event.widget
        date = w.get_date()
        locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8')
        date_with_format = date.strftime("%A, %d de %B de %Y") # Para windows
        #date_with_format = date.strftime("%A, %-d de %B de %Y") # Para Linux
        self.day_name.set(date_with_format)

    def return_date(self):
        # Poner alguna condición para que no le devuelva esto si no hay nada en el campo del formato de la fecha.
        if self.day_name.get() == "":
            variable_return = "0"
        else:
            variable_return = self.calendar_date_entry.get_date().strftime("%d/%m/%Y")

        return variable_return

    def clear(self):
        self.day_name.set("")
Exemplo n.º 24
0
def exportCSV ():
    global fin, folder_selected

    # export_file_path = filedialog.asksaveasfile(defaultextension='.csv')
    folder_selected = os.path.normpath(filedialog.askdirectory(initial = '/'))



def setsame(e):
    cal2.set_date(cal1.get_date())

start = Label(root, text = "Start:", pady = 20)
cal1 = DateEntry(width=12, background='darkblue',
                foreground='white', borderwidth=2, date_pattern='dd/mm/yy')
cal1.bind("<<DateEntrySelected>>", setsame)


end = Label(root, text = "End:",  pady=10)
cal2 = DateEntry(width=12, background='darkblue',
                foreground='white', borderwidth=2, date_pattern='dd/mm/yy')

btn = Button(root, text="Download", command=pressed, padx=40)

# path = Label(root, text = folder_selected, pady=5)
curr = Label(root, text = "Current Path :    "+folder_selected, padx = 30, pady=5)

locn = Button(root, text="Change Path", command=exportCSV, padx=20)


start.grid(row=2, column=0)
class ChooseDate(tk.Frame):
    def __init__(self,master):
        tk.Frame.__init__(self,master)
        # initialise and reset flag and multiclass variables on ChooseDate page
        global sel_hour,sel_minute,dateClassFlag
        sel_hour = sel_minute = sel_date = sel_time = dateClassFlag = None

        #User Interface of ChooseDate page
        #Display Background Image
        tk.Label(self,image = master.getImage(img_def)).grid(sticky='nsew')
        
        # Values in dropdownlist for hours and minutes
        hours = [i for i in range(25)]
        minutes = [i for i in range(60)]
        
        # Arguments for dropdownlist widget (data type declaration for userinput)
        hourVar = tk.StringVar()
        minuteVar = tk.StringVar()

        #Date Label
        self.date_prompt = tk.Label(self,text="Date", width=8, bg = "black",fg='PaleTurquoise2', font=standardFont,anchor='center')
        self.date_prompt.place(x = 250,y = 50)
        
        # Date picker widget instantiation
        self.dateEnt = DateEntry(self,state="readonly",font=standardFont)
        self.dateEnt.bind("<<DateEntrySelected>>", self.print_date)
        self.dateEnt.place(x = 350,y = 50)

        #Display the date in the format of Friday 5 Nov 
        self.sel_date_lbl = tk.Label(self,text="Today",font=standardFont,bg="black",fg='PaleTurquoise2',anchor='center')
        self.sel_date_lbl.place(x = 550,y = 50)
        
        # Dropdown list for hours
        self.hour_label = tk.Label(self,text="Hour",width=8, font=standardFont,bg = "black",fg='PaleTurquoise2')
        self.hour_cbb = ttk.Combobox(self,state="readonly",font=standardFont,textvariable=hourVar,values=hours,width = 9)
        self.hour_cbb.bind("<<ComboboxSelected>>", self.print_time)
        self.hour_label.place(x = 250,y = 150)
        self.hour_cbb.place(x = 350,y = 150)
        
        # Dropdown list for minutes
        self.minute_label = tk.Label(self,text="Min",width=8, font=standardFont,bg = "black",fg='PaleTurquoise2')
        self.minute_cbb = ttk.Combobox(self,state="readonly",font=standardFont,textvariable=minuteVar,values=minutes,width = 9)
        self.minute_cbb.bind("<<ComboboxSelected>>", self.print_time)
        self.minute_label.place(x = 250,y = 200)
        self.minute_cbb.place(x = 350,y = 200)

        #Display the hour and minutes like like 12:05 if got user input
        self.sel_time_lbl = tk.Label(self,text="00:00",font=standardFont,bg = "black",fg='PaleTurquoise2',anchor='center')
        self.sel_time_lbl.place(x = 550,y = 150)

        #Submit Button
        self.submitBtn = tk.Button(self,text="Submit",bg = "green",fg='PaleTurquoise2',borderwidth=0, width = 30, font=standardFont,command=self.submitTime)
        self.submitBtn.place(x = 250,y = 350)
        
        #Back Button
        self.backBtn = tk.Button(self,text="Back",bg='red',fg='PaleTurquoise2',borderwidth=0, width = 30,font=standardFont,command=lambda: master.switch_frame(Home))
        self.backBtn.place(x =250,y = 400)

    #Functions for ChooseDate page
    #Check the user input for time
    def submitTime(self):
        global sel_hour,sel_minute,sel_date,sel_time,dateClassFlag
        ## Validation for empty user input
        if len(self.hour_cbb.get()) == 0 or len(self.minute_cbb.get()) == 0:
            messagebox.showwarning("Uh Oh!","Please select hours and minutes")
        else:
            sel_hour = int(self.hour_cbb.get())
            sel_minute = int(self.minute_cbb.get()) 
            sel_time = "{0:0=2d}".format(sel_hour) + ":" + "{0:0=2d}".format(sel_minute)
            sel_date = self.dateEnt.get_date().strftime("%A")
            dateClassFlag = True
            self.master.switch_frame(ChooseStore)
            
    #Configure the label based on user input of the date like Tuesday 5 Nov        
    def print_date(self,e):
        selD_display = self.dateEnt.get_date().strftime("%A %d %b")
        self.sel_date_lbl.config(text=selD_display)

    #Configure the label based on user input of hour and time like 12:05
    def print_time(self,e):
        if len(self.hour_cbb.get())==0 or len(self.minute_cbb.get())==0:
            pass
        else:
            selT_display = "{0:0=2d}".format(int(self.hour_cbb.get())) + ":" + "{0:0=2d}".format(int(self.minute_cbb.get()))
            self.sel_time_lbl.config(text=str(selT_display))
Exemplo n.º 26
0
v.bind('<Enter>', setPwd)
v.bind('<Leave>', setPwd)

L3 = Label(root, text="Date Until")
L3.pack(side=LEFT)
L3.place(x=5, y=110)
cal = DateEntry(root,
                width=12,
                background='darkblue',
                foreground='white',
                borderwidth=2,
                year=2019)
cal.pack(padx=10, pady=10)
cal.place(x=150, y=110)
#cal.bind("<Key>", setDateUntil)
cal.bind("<Enter>", setDateUntil)
cal.bind("<Leave>", setDateUntil)

L4 = Label(root, text="Date Start Filter")
L4.pack(side=LEFT)
L4.place(x=5, y=140)
cal2 = DateEntry(root,
                 width=12,
                 background='darkblue',
                 foreground='white',
                 borderwidth=2,
                 year=2019)
cal2.pack(padx=10, pady=10)
cal2.place(x=150, y=140)
#cal2.bind("<Key>", setDateFil)
cal2.bind("<Enter>", setDateFilStart)
Exemplo n.º 27
0
class bookingpage(tk.Tk):
    def __init__(self,id, *args, **kwargs):
        # __init__ function for class Tk
        tk.Tk.__init__(self, *args, **kwargs)
        self.title("Booking")
        self.geometry("900x500")
        self.config(background="black", pady=10)

        lbs = tk.Label(self, text="Booking", bg="black", fg="white", font=20)
        lbs.place(x=110, y=5)
        self.id=id
        self.details()
    def details(self):
        lb2_name = tk.Label(self, text="Name - ", bg="black", fg="white")
        self.name = tk.Entry(self)
        lb2_name.place(x=10, y=40)
        self.name.place(x=110, y=40)

        lb2_guest = tk.Label(self, text="No of Guest ", bg="black", fg="white")
        self.guest = tk.Entry(self)
        lb2_guest.place(x=10, y=80)
        self.guest.place(x=110, y=80)

        self.tkvar = tk.StringVar(self)

        # Dictionary with options

        choice = {'Standard', 'Deluxe', 'Luxury'}
        self.tkvar.set('Select')  # set the default option

        popupMenu = tk.OptionMenu(self, self.tkvar, *choice,command=self.check_acc)
        tk.Label(self, text="Room Type",bg="black", fg="white").place(x=10, y=120)
        popupMenu.place(x=110, y=120)

        lb2_room = tk.Label(self, text="No Of Room - ", bg="black", fg="white")
        self.room = tk.Entry(self)
        lb2_room.place(x=10, y=160)
        self.room.place(x=110, y=160)

        # lb2_s = tk.Label(self, text="Email - ", bg="black", fg="white")
        # self.lb2_s2 = tk.Entry(self)
        # lb2_s.place(x=10, y=200)
        # self.lb2_s2.place(x=110, y=200)

        current_date = date.today()
        self.cur_date=current_date
        tomorrow = date.today() + timedelta(1)
        label1 = tk.Label(self, text='Check In Date',bg="black", fg="white")
        label1.place(x='10', y='200')
        self.cal = DateEntry(self, width=12, year=current_date.year, month=current_date.month, day=current_date.day,
                             mindate=current_date, date_pattern='y-mm-dd',
                             background='darkblue', foreground='white', borderwidth=2)
        self.cal.place(x='110', y='200')
        label2 = tk.Label(self, text='Check out Date',bg="black", fg="white")
        label2.place(x='240', y='200')
        self.cal.bind("<<DateEntrySelected>>", self.callback)
        date_time_obj = datetime.datetime.strptime(self.cal.get(), '%Y-%m-%d')
        # print(type(date_time_obj))
        # if self.cal.get():
        #     min_date=self.cal.get()
        # else:
        #    min_date=tomorrow
        lb2_s = tk.Label(self, text="Price - ", bg="black", fg="white")
        self.price = tk.Label(self,bg="black", fg="white")
        lb2_s.place(x=10, y=240)
        self.price.place(x=110, y=240)
        self.cal1 = DateEntry(self, width=12, year=tomorrow.year, month=tomorrow.month, day=tomorrow.day,
                              mindate=tomorrow, date_pattern='y-mm-dd',
                              background='darkblue', foreground='white', borderwidth=2)
        self.cal1.place(x='380', y='200')
        # reg = self.register(self.callback)
        #
        # self.cal1.config(validate="key",
        #          validatecommand=(reg, '% P'))
        # button = tk.Button(self, text='Search', command=self.search)
        # button.place(x='150', y='120')
        try:

            mycursor = mydb.cursor()

            mycursor.execute("SELECT * FROM hotel_name where id=%s"%self.id)

            self.myresult = mycursor.fetchall()
            print(self.myresult)
            im = Image.open(r"%s" % self.myresult[0][5])
            image = im
            self.background_image = ImageTk.PhotoImage(im)
            lb_hotel = tk.Label(self, text=self.myresult[0][1], bg="black", fg="white", font=20)
            lb_hotel.place(x=400, y=40)
            row = 50
            lb_img = tk.Label(self,image=self.background_image,height=50,width=50)
            lb_img.place(x=400, y=80)
            lb_img.photo=self.background_image



        except:
           print("No result")
        button = tk.Button(self, text="book", command=self.book)
        button.place(x='120', y='280')

    def callback(self,input):
        w = input.widget
        date = w.get_date()+timedelta(1)
        self.cal1.config(mindate=date)

    def book(self):
        try:
            mycursor = mydb.cursor()

            sql = "INSERT INTO booking (name,no_guest,room_type,checkin,checkout,hot_name,book_date,total) VALUES (%s, %s,%s,%s,%s,%s,%s,%s)"
            val = (
                self.name.get(), self.guest.get(), self.tkvar.get(), self.cal.get(), self.cal1.get(), self.myresult[0][1],self.cur_date,(self.p*int(self.room.get())))
            mycursor.execute(sql, val)

            mydb.commit()

            print(mycursor.rowcount, "record inserted.")
            self.display=tk.Label(self)
            self.display2.config(bg="green", fg="white", text="Saved Success")

            self.display2.place(x=20, y=1)
        except:
            self.display = tk.Label(self)
            self.display2.config(bg="red", fg="white", text="Not Saved")

            self.display2.place(x=20, y=1)



    def check_acc(self,event):
        selected = self.tkvar.get()
        self.dic={'Standard':7,'Deluxe':8,'Luxury':9}
        self.dic2 = {'Standard': 2, 'Deluxe': 3, 'Luxury': 4}
        if(self.myresult[0][self.dic2[selected]]==0):
            lab=tk.Label(self,text="Room Full")
            lab.place(x=200,y=120)
        else:
            if (len(selected) != 0):
                self.price.config(text=self.myresult[0][self.dic[selected]], bg="black", fg="white")
                self.p=self.myresult[0][self.dic[selected]]
Exemplo n.º 28
0
class DateDialog(tk.Toplevel):

    def __init__(self, parent, controller):
        tk.Toplevel.__init__(self, parent)
        self.title("Änderung via Datum")
        self.resizable(0,0)
        
        self.controller = controller
        self.return_value = None
        self.date = datetime.datetime.now()

        tk.Label(self, text="Datum auswählen:").pack(side=tk.TOP, pady=8)

        values_frame = tk.Frame(self)
        values_frame.pack(pady=4)

        self.calendar = DateEntry(
            values_frame,
            year=self.date.year,
            month=self.date.month,
            day=self.date.day,
            locale="de_DE",
        )
        self.calendar.bind("<<DateEntrySelected>>", self.set_new_date)
        self.calendar.pack(pady=6)

        self.labels = {
            "Stunde" : None,
            "Minute" : None,
            "Sekunde" : None
        }

        for label in self.labels:
            frame = tk.Frame(values_frame)
            frame.pack(side=tk.LEFT, padx=2)
            tk.Label(frame, text=label).pack(side=tk.LEFT)
            if label == "Stunde":
                self.labels[label] = tk.Spinbox(frame, from_=0, to=23, width=5)
            else:
                self.labels[label] = tk.Spinbox(frame, from_=0, to=60, width=5)
            self.labels[label].pack(side=tk.RIGHT, padx=2)

        button_frame = tk.Frame(self)
        button_frame.pack(side=tk.BOTTOM, pady=6)

        self.ok_button = tk.Button(button_frame, text="OK", width=10, command=self.on_ok)
        self.cancle_button = tk.Button(button_frame, text="Abbrechen", width=10, command=self.on_cancle)
        
        self.ok_button.pack(side=tk.LEFT, padx=5)
        self.cancle_button.pack(side=tk.RIGHT, padx=5)

    def set_new_date(self, e):
            self.date = self.calendar.get_date()

    def on_ok(self, event=None):
        self.return_value = datetime.datetime(
            year=self.date.year,
            month=self.date.month,
            day=self.date.day,
            hour=int(self.labels["Stunde"].get()), 
            minute=int(self.labels["Minute"].get()),
            second=int(self.labels["Sekunde"].get())
        )
        self.destroy()
        
    
    def on_cancle(self, event=None):
        self.destroy()

    def show(self):
        self.wm_deiconify()
        self.wait_window()
        return self.return_value
        
Exemplo n.º 29
0
    screen_width = master.winfo_screenwidth()
    screen_height = master.winfo_screenheight()
    # calculate position x and y coordinates
    x = (screen_width/2)  - (width/4)
    y = (screen_height/3) - (height/4)
    master.geometry('%dx%d+%d+%d' % (width/2.2, height/2.2, x, y))

# frame containing update data button and date selection
dateFrame = tk.Frame(master)
dateFrame.grid(row=0, column=0, sticky='w', padx=10)

tk.Button(dateFrame, text='Update Data', relief='groove', overrelief='sunken', command=updateData).grid(row=0, column=0, sticky='nsew', pady=(4,0))
#tk.Label(buttonFrame, text=' Select date ').grid(row=0, column=0)
cal = DateEntry(dateFrame, width=12, year=int(today[0]), month=int(today[1]), day=int(today[2]), background='darkblue', forground='white', borderwidth=2)
cal.grid(row=1, column=0)
cal.bind('<<DateEntrySelected>>', updateDataHelper)

simFrame = tk.Frame(master)
simFrame.grid(row=0, column=1, sticky='nw')
tk.Button(simFrame, text = "Simulate All", relief='groove', overrelief='sunken', command=simulateAll).grid(row=0, column=0, sticky='nw', pady=4)
tk.Button(simFrame, text = "Simulate Game", relief='groove', overrelief='sunken', command=simulateGame).grid(row=0, column=1, sticky='nw', pady=4)

# frame containing display lineup button and away/home team info
teamsFrame = tk.Frame(master)
teamsFrame.grid(row=1, column=1)

# away team entries
awayFrame = tk.Frame(teamsFrame)
awayFrame.grid(row=1, column=0)
awayTeamVar = tk.StringVar(master)
awayTeamVar.set(teamList[0])
                    pady=5,
                    sticky='NW',
                    columnspan=100)

# create and place date label
# label_space.grid(row=4, column=0, sticky='W')
label_date = ttk.Label(frame_kernal_name, text='Experiment date:')
label_date.grid(row=4, column=1, padx=10, pady=10, sticky='E')

# create, place, and update date selector
cal = DateEntry(frame_kernal_name,
                date_pattern='y-mm-dd',
                width=12,
                borderwidth=2)
cal.grid(row=4, column=2, padx=5, pady=5, sticky='W')
cal.bind("<<DateEntrySelected>>",
         save_date)  # update date everytime a day is selected on calendar.
# add tool tip for button
Balloon(cal,
        headertext=tip_text_header,
        text=tip_text_create_structure,
        background=None,
        image=None)

# create and place name label
# label_space.grid(row=5, column=0, sticky='W')
label_name = ttk.Label(frame_kernal_name, text='Experiment name:')
label_name.grid(row=5, column=1, padx=10, pady=10, sticky='E')

# create and place name entry widget
exp_name_entry = ttk.Entry(frame_kernal_name,
                           textvariable=experiment_name,