def get_calendar(self): print('in get_calendar app') window = tk.Tk() cal = Calendar(window) year = time.localtime(time.time())[0] month = time.localtime(time.time())[1] date = time.localtime(time.time())[2] if month == 12: cal.config(mindate=datetime.date(year, month, date), maxdate=datetime.date(year, 1, date)) elif month == 1 and date > 28: cal.config(mindate=datetime.date(year, month, date), maxdate=datetime.date(year, month + 1, 28)) else: try: cal.config(mindate=datetime.date(year, month, date), maxdate=datetime.date(year, month + 1, date)) except ValueError: cal.config(mindate=datetime.date(year, month, date), maxdate=datetime.date(year, month + 1, date - 1)) cal.config(showweeknumbers=False, disabledbackground='red', disabledforeground='blue', disabledselectbackground='pink', disabledselectforeground='purple', disableddaybackground='red') cal.pack() select_button = tk.Button(cal, text='Select Date', command=lambda: print(cal.selection_get())) select_button.pack() cal.mainloop()
def test_calendar_buttons_functions(self): widget = Calendar(self.window) widget.pack() widget._prev_month() widget._next_month() widget._prev_year() widget._next_year() widget._remove_selection() widget.selection_set(format_date(date(2018, 12, 31), 'short')) self.assertEqual(widget.selection_get(), date(2018, 12, 31)) with self.assertRaises(ValueError): widget.selection_set("ab") widget.selection_set(None) self.assertIsNone(widget.selection_get()) widget.selection_set(date(2015, 12, 31)) self.assertEqual(widget.selection_get(), date(2015, 12, 31)) widget.config(selectmode='none') self.assertIsNone(widget.selection_get()) l = ttk.Label(widget, text="12") widget._on_click(TestEvent(widget=l)) self.assertIsNone(widget.selection_get()) self.window.update() widget.config(selectmode='day') l = ttk.Label(widget, text="12") widget._on_click(TestEvent(widget=l)) self.window.update() self.assertEqual(widget.selection_get(), date(2015, 12, 12)) widget.config(state='disabled') l = ttk.Label(widget, text="14") widget._on_click(TestEvent(widget=l)) self.window.update() self.assertEqual(widget.selection_get(), date(2015, 12, 12))
def test_calendar_buttons_functions(self): widget = Calendar(self.window) widget.pack() widget._prev_month() widget._next_month() widget._prev_year() widget._next_year() widget._remove_selection() widget.selection_set(datetime(2018, 12, 31).strftime('%x')) self.assertEqual(widget.selection_get(), datetime(2018, 12, 31)) with self.assertRaises(ValueError): widget.selection_set("ab") widget.selection_set(None) self.assertIsNone(widget.selection_get()) widget.selection_set(datetime(2015, 12, 31)) self.assertEqual(widget.selection_get(), datetime(2015, 12, 31)) widget.config(selectmode='none') self.assertIsNone(widget.selection_get()) l = ttk.Label(widget, text="12") widget._on_click(TestEvent(widget=l))
def test_calendar_get_set(self): widget = Calendar(self.window, foreground="red") widget.pack() self.window.update() options = [ 'cursor', 'font', 'borderwidth', 'state', 'selectmode', 'textvariable', 'locale', 'showweeknumbers', 'selectbackground', 'selectforeground', 'disabledselectbackground', 'disabledselectforeground', 'normalbackground', 'normalforeground', 'background', 'foreground', 'bordercolor', 'othermonthforeground', 'othermonthbackground', 'othermonthweforeground', 'othermonthwebackground', 'weekendbackground', 'weekendforeground', 'headersbackground', 'headersforeground', 'disableddaybackground', 'disableddayforeground' ] self.assertEqual(sorted(widget.keys()), sorted(options)) with self.assertRaises(AttributeError): widget.cget("test") self.assertEqual(widget["foreground"], "red") widget["foreground"] = "blue" self.window.update() self.assertEqual(widget["foreground"], "blue") widget.config(cursor="watch") self.window.update() self.assertEqual(widget["cursor"], "watch") self.assertTrue(widget["showweeknumbers"]) widget.config(showweeknumbers=False) self.window.update() self.assertFalse(widget["showweeknumbers"]) self.assertFalse(widget._week_nbs[0].winfo_ismapped()) widget.config(font="Arial 20 bold") self.window.update() self.assertEqual(widget["font"], "Arial 20 bold") widget.config(borderwidth=5) self.window.update() self.assertEqual(widget["borderwidth"], 5) with self.assertRaises(ValueError): widget.config(borderwidth="a") widget.config(selectmode="none") self.window.update() self.assertEqual(widget["selectmode"], "none") widget.config(selectmode="day") self.window.update() self.assertEqual(widget["selectmode"], "day") with self.assertRaises(ValueError): widget.config(selectmode="a") self.assertEqual(widget.cget('state'), tk.NORMAL) with self.assertRaises(ValueError): widget.config(state="test") with self.assertRaises(AttributeError): widget.config(locale="en_US.UTF-8") with self.assertRaises(AttributeError): widget.config(test="test") dic = {op: "yellow" for op in options[7:]} widget.configure(**dic) self.window.update() for op in options[7:]: self.assertEqual(widget.cget(op), "yellow")
#Calendar Settings cal = Calendar(root, font="fixedsys 14", selectmode="day", locale="en_US", cursor="sizing", background="white", disabledbackground="white", bordercolor="pink", headersbackground="bisque2", normalbackground="black", foreground="bisque4", normalforeground="bisque4", headersforeground="bisque4") cal.config(background="black") cal.grid(row=0, column=0, sticky="N", rowspan=9) cal.bind("<<CalendarSelected>>", ListTodo) #Variable Global tanggal = str(cal.selection_get()) #Style style = ttk.Style() style.configure("Treeview", background="bisque4", foreground="bisque4") treev = ttk.Treeview(root) treev.grid(row=0, column=1, sticky="WNE", rowspan=4, columnspan=2) #Scrollbar Settings scrollBar = tk.Scrollbar(root, orient="vertical", command=treev.yview)
def test_calendar_get_set(self): widget = Calendar(self.window, foreground="red", year=2010, month=1, day=3) widget.pack() self.window.update() options = [ 'cursor', 'font', 'borderwidth', 'state', 'selectmode', 'textvariable', 'locale', 'date_pattern', 'mindate', 'maxdate', 'firstweekday', 'weekenddays', 'showweeknumbers', 'showothermonthdays', 'selectbackground', 'selectforeground', 'disabledselectbackground', 'disabledselectforeground', 'normalbackground', 'normalforeground', 'background', 'foreground', 'bordercolor', 'disabledbackground', 'disabledforeground', 'othermonthforeground', 'othermonthbackground', 'othermonthweforeground', 'othermonthwebackground', 'weekendbackground', 'weekendforeground', 'headersbackground', 'headersforeground', 'disableddaybackground', 'disableddayforeground', 'tooltipbackground', 'tooltipforeground', 'tooltipalpha', 'tooltipdelay' ] self.assertEqual(sorted(widget.keys()), sorted(options)) with self.assertRaises(AttributeError): widget.cget("test") self.assertEqual(widget["foreground"], "red") widget["foreground"] = "blue" self.window.update() self.assertEqual(widget["foreground"], "blue") widget.configure({ 'foreground': 'cyan', 'background': 'green' }, background="blue", borderwidth=4) self.window.update() self.assertEqual(widget["foreground"], "cyan") self.assertEqual(widget["background"], "blue") self.assertEqual(widget["borderwidth"], 4) widget.config(locale='fr_FR') self.assertEqual(widget['locale'], 'fr_FR') self.assertEqual(widget._week_days[0].cget('text'), 'lun.') widget.config(locale='en_US') self.assertEqual(widget['locale'], 'en_US') self.assertEqual(widget._week_days[0].cget('text'), 'Mon') with self.assertRaises(UnknownLocaleError): widget.config(locale="jp") widget.config(cursor="watch") self.window.update() self.assertEqual(widget["cursor"], "watch") self.assertTrue(widget["showweeknumbers"]) self.assertNotEqual(widget._week_nbs[0].grid_info(), {}) widget.config(showweeknumbers=False) self.window.update() self.assertFalse(widget["showweeknumbers"]) self.assertEqual(widget._week_nbs[0].grid_info(), {}) self.assertFalse(widget._week_nbs[0].winfo_ismapped()) self.assertNotEqual(widget._calendar[-1][-1].cget('text'), '') self.assertTrue(widget["showothermonthdays"]) widget.config(showothermonthdays=False) self.window.update() self.assertFalse(widget["showothermonthdays"]) self.assertEqual(widget._calendar[-1][-1].cget('text'), '') widget.config(font="Arial 20 bold") self.window.update() self.assertEqual(widget["font"], "Arial 20 bold") widget.config(borderwidth=5) self.window.update() self.assertEqual(widget["borderwidth"], 5) with self.assertRaises(ValueError): widget.config(borderwidth="a") widget.config(firstweekday='sunday') self.window.update() self.assertEqual(widget["firstweekday"], 'sunday') with self.assertRaises(ValueError): widget.config(firstweekday="a") widget.config(weekenddays=[5, 7]) self.window.update() we_style = 'we.%s.TLabel' % widget._style_prefixe normal_style = 'normal.%s.TLabel' % widget._style_prefixe for i in range(7): self.assertEqual(widget._calendar[0][i].cget('style'), we_style if (i + 1) in [5, 7] else normal_style) widget["mindate"] = datetime(2018, 9, 10) self.assertEqual(widget["mindate"], date(2018, 9, 10)) widget.selection_set(date(2018, 9, 23)) self.window.update() i, j = widget._get_day_coords(date(2018, 9, 2)) self.assertIn('disabled', widget._calendar[i][j].state()) i, j = widget._get_day_coords(date(2018, 9, 21)) self.assertNotIn('disabled', widget._calendar[i][j].state()) self.assertIn('disabled', widget._l_month.state()) self.assertIn('disabled', widget._l_year.state()) i, j = widget._get_day_coords(date(2018, 9, 10)) self.assertNotIn('disabled', widget._calendar[i][j].state()) i, j = widget._get_day_coords(date(2018, 9, 9)) self.assertIn('disabled', widget._calendar[i][j].state()) with self.assertRaises(TypeError): widget.config(mindate="a") self.assertEqual(widget["mindate"], date(2018, 9, 10)) widget["mindate"] = None self.window.update() self.assertIsNone(widget["mindate"]) i, j = widget._get_day_coords(date(2018, 9, 2)) self.assertNotIn('disabled', widget._calendar[i][j].state()) self.assertNotIn('disabled', widget._l_month.state()) self.assertNotIn('disabled', widget._l_year.state()) widget["maxdate"] = datetime(2018, 9, 10) self.assertEqual(widget["maxdate"], date(2018, 9, 10)) widget.selection_set(date(2018, 9, 2)) self.window.update() i, j = widget._get_day_coords(date(2018, 9, 22)) self.assertIn('disabled', widget._calendar[i][j].state()) i, j = widget._get_day_coords(date(2018, 9, 4)) self.assertNotIn('disabled', widget._calendar[i][j].state()) self.assertIn('disabled', widget._r_month.state()) self.assertIn('disabled', widget._r_year.state()) i, j = widget._get_day_coords(date(2018, 9, 10)) self.assertNotIn('disabled', widget._calendar[i][j].state()) i, j = widget._get_day_coords(date(2018, 9, 11)) self.assertIn('disabled', widget._calendar[i][j].state()) with self.assertRaises(TypeError): widget.config(maxdate="a") self.assertEqual(widget["maxdate"], date(2018, 9, 10)) widget["maxdate"] = None self.window.update() self.assertIsNone(widget["maxdate"]) i, j = widget._get_day_coords(date(2018, 9, 22)) self.assertNotIn('disabled', widget._calendar[i][j].state()) self.assertNotIn('disabled', widget._r_month.state()) self.assertNotIn('disabled', widget._r_year.state()) widget.config(selectmode="none") self.window.update() self.assertEqual(widget["selectmode"], "none") widget.config(selectmode="day") self.window.update() self.assertEqual(widget["selectmode"], "day") with self.assertRaises(ValueError): widget.config(selectmode="a") self.assertEqual(widget.cget('state'), tk.NORMAL) with self.assertRaises(ValueError): widget.config(state="test") widget['date_pattern'] = 'MM/dd/yyyy' self.window.update() self.assertEqual(widget["date_pattern"], 'MM/dd/yyyy') with self.assertRaises(ValueError): widget.config(date_pattern="mm-dd-cc") with self.assertRaises(AttributeError): widget.config(test="test") dic = {op: "yellow" for op in options[12:-4]} widget.configure(**dic) self.window.update() for op in options[12:-4]: self.assertEqual(widget.cget(op), "yellow") widget.config(tooltipalpha=0.5) self.assertEqual(widget["tooltipalpha"], 0.5) self.assertEqual(widget.tooltip_wrapper["alpha"], 0.5) widget.config(tooltipdelay=1000) self.assertEqual(widget["tooltipdelay"], 1000) self.assertEqual(widget.tooltip_wrapper["delay"], 1000) widget.config(tooltipforeground='black') self.assertEqual(widget["tooltipforeground"], 'black') widget.config(tooltipbackground='cyan') self.assertEqual(widget["tooltipbackground"], 'cyan')
def test_calendar_get_set(self): widget = Calendar(self.window, foreground="red") widget.pack() self.window.update() options = [ 'cursor', 'font', 'borderwidth', 'state', 'selectmode', 'textvariable', 'locale', 'firstweekday', 'showweeknumbers', 'showothermonthdays', 'selectbackground', 'selectforeground', 'disabledselectbackground', 'disabledselectforeground', 'normalbackground', 'normalforeground', 'background', 'foreground', 'bordercolor', 'othermonthforeground', 'othermonthbackground', 'othermonthweforeground', 'othermonthwebackground', 'weekendbackground', 'weekendforeground', 'headersbackground', 'headersforeground', 'disableddaybackground', 'disableddayforeground', 'tooltipbackground', 'tooltipforeground', 'tooltipalpha', 'tooltipdelay' ] self.assertEqual(sorted(widget.keys()), sorted(options)) with self.assertRaises(AttributeError): widget.cget("test") self.assertEqual(widget["foreground"], "red") widget["foreground"] = "blue" self.window.update() self.assertEqual(widget["foreground"], "blue") widget.config(cursor="watch") self.window.update() self.assertEqual(widget["cursor"], "watch") self.assertTrue(widget["showweeknumbers"]) self.assertNotEqual(widget._week_nbs[0].grid_info(), {}) widget.config(showweeknumbers=False) self.window.update() self.assertFalse(widget["showweeknumbers"]) self.assertEqual(widget._week_nbs[0].grid_info(), {}) self.assertFalse(widget._week_nbs[0].winfo_ismapped()) self.assertNotEqual(widget._calendar[-1][-1].cget('text'), '') self.assertTrue(widget["showothermonthdays"]) widget.config(showothermonthdays=False) self.window.update() self.assertFalse(widget["showothermonthdays"]) self.assertEqual(widget._calendar[-1][-1].cget('text'), '') widget.config(font="Arial 20 bold") self.window.update() self.assertEqual(widget["font"], "Arial 20 bold") widget.config(borderwidth=5) self.window.update() self.assertEqual(widget["borderwidth"], 5) with self.assertRaises(ValueError): widget.config(borderwidth="a") widget.config(firstweekday='sunday') self.window.update() self.assertEqual(widget["firstweekday"], 'sunday') with self.assertRaises(ValueError): widget.config(firstweekday="a") widget.config(selectmode="none") self.window.update() self.assertEqual(widget["selectmode"], "none") widget.config(selectmode="day") self.window.update() self.assertEqual(widget["selectmode"], "day") with self.assertRaises(ValueError): widget.config(selectmode="a") self.assertEqual(widget.cget('state'), tk.NORMAL) with self.assertRaises(ValueError): widget.config(state="test") with self.assertRaises(AttributeError): widget.config(locale="en_US.UTF-8") with self.assertRaises(AttributeError): widget.config(test="test") dic = {op: "yellow" for op in options[8:-4]} widget.configure(**dic) self.window.update() for op in options[8:-4]: self.assertEqual(widget.cget(op), "yellow") widget.config(tooltipalpha=0.5) self.assertEqual(widget["tooltipalpha"], 0.5) self.assertEqual(widget.tooltip_wrapper["alpha"], 0.5) widget.config(tooltipdelay=1000) self.assertEqual(widget["tooltipdelay"], 1000) self.assertEqual(widget.tooltip_wrapper["delay"], 1000) widget.config(tooltipforeground='black') self.assertEqual(widget["tooltipforeground"], 'black') widget.config(tooltipbackground='cyan') self.assertEqual(widget["tooltipbackground"], 'cyan')
anchor="n") select_date_lb.grid(row=current_row, column=0) current_row = current_row + 1 start_date_lb = Label(main_window, text="From: ", font=(None, 18), anchor="n") start_date_lb.grid(row=current_row, column=0) start_date = Calendar(main_window, selectmode="day", selectforeground="red", foreground="blue", background="gray", headersforeground="black", showweeknumbers=False) start_date.config(maxdate=start_date.datetime.now()) start_date.grid(row=current_row, column=1) end_date_lb = Label(main_window, text="To: ", font=(None, 18), anchor="n") end_date_lb.grid(row=current_row, column=2) end_date = Calendar(main_window, selectmode="day", selectforeground="red", foreground="blue", background="gray", headersforeground="black", showweeknumbers=False) end_date.config(maxdate=end_date.datetime.now()) end_date.grid(row=current_row, column=3)
def test_calendar_get_set(self): widget = Calendar(self.window, foreground="red") widget.pack() self.window.update() options = [ 'cursor', 'font', 'borderwidth', 'selectmode', 'locale', 'selectbackground', 'selectforeground', 'normalbackground', 'normalforeground', 'background', 'foreground', 'bordercolor', 'othermonthforeground', 'othermonthbackground', 'othermonthweforeground', 'othermonthwebackground', 'weekendbackground', 'weekendforeground', 'headersbackground', 'headersforeground' ] self.assertEqual(sorted(widget.keys()), sorted(options)) with self.assertRaises(AttributeError): widget.cget("test") self.assertEqual(widget["foreground"], "red") widget["foreground"] = "blue" self.window.update() self.assertEqual(widget["foreground"], "blue") widget.config(cursor="watch") self.window.update() self.assertEqual(widget["cursor"], "watch") widget.config(font="Arial 20 bold") self.window.update() self.assertEqual(widget["font"], "Arial 20 bold") widget.config(borderwidth=5) self.window.update() self.assertEqual(widget["borderwidth"], 5) with self.assertRaises(ValueError): widget.config(borderwidth="a") widget.config(selectmode="none") self.window.update() self.assertEqual(widget["selectmode"], "none") widget.config(selectmode="day") self.window.update() self.assertEqual(widget["selectmode"], "day") with self.assertRaises(ValueError): widget.config(selectmode="a") with self.assertRaises(AttributeError): widget.config(locale="en_US.UTF-8") with self.assertRaises(AttributeError): widget.config(test="test") dic = {op: "yellow" for op in options[5:]} widget.configure(**dic) self.window.update() for op in options[5:]: self.assertEqual(widget.cget(op), "yellow")
def open(): global cal, end_button, pick_button, prev_date, root, startCal, endCal, startDate, endDate, CLUSTERS, CLUSTERS_NAMES, CLUSTERS_DATES, loop, flagaRandom, random_button, randtxt, startDate, endDate if not startDate: startDate = startCal.get_date() endDate = endCal.get_date() switch = True if checkProperDate(startDate, endDate) == 0: return CLUSTERS, CLUSTERS_NAMES, CLUSTERS_DATES = createClusters( startDate.timetuple().tm_yday, endDate.timetuple().tm_yday) root.destroy() root = tkinter.Tk() root.configure(background="white") root.title('Date Picker') img = tkinter.Image("photo", file="data/calendar.gif") root.tk.call('wm', 'iconphoto', root._w, img) style = ttk.Style(root) style.theme_use('default') root.geometry("1000x800") my_label = tkinter.Label(root, text="Select a date") cal = Calendar(root, selectmode="day", year=2021, disabledbackground="red", headersbackground="slateblue", normalbackground="white", weekendbackground="mediumpurple", selectbackground="salmon", showothermonthdays=False) cal.config(background="black") cal.pack(pady=20, fill="both", expand=True) prev_date = cal.get_date() def grab_date(): global picked_ids picked_date = cal.get_date() # my_label.config(text="Picked Date " + picked_date) if picked_date == "": messagebox.showerror("Error", "First select a date!") return if datetime.strptime(picked_date, "%m/%d/%y") not in picked_ids["dates"]: picked_ids["ids"].append( cal.calevent_create(datetime.strptime(picked_date, "%m/%d/%y"), "Not provided", 'message')) picked_ids["dates"].append( datetime.strptime(picked_date, "%m/%d/%y")) date_index = datetime.strptime(picked_date, "%m/%d/%y").timetuple().tm_yday picked_ids["indexes"].append(date_index) else: idx = picked_ids["dates"].index( datetime.strptime(picked_date, "%m/%d/%y")) id = picked_ids["ids"][idx] date = cal.calevents[id]['date'] del cal.calevents[id] del cal._calevent_dates[date] cal._reset_day(date) picked_ids["ids"].pop(idx) picked_ids["dates"].pop(idx) picked_ids["indexes"].pop(idx) my_label.config(text="Selected date: None") global prev_date prev_date = None cal._sel_date = None def random_events_button(): global picked_ids, endDate, startDate, cal, root, flagaRandom, randtxt, random_button if flagaRandom: ilosc = endDate.timetuple().tm_yday - startDate.timetuple( ).tm_yday + 1 daty = np.unique( np.random.randint(startDate.timetuple().tm_yday, endDate.timetuple().tm_yday + 1, np.random.randint(1, ilosc + 1))) for data in daty: datatemp = (datetime(2021, 1, 1) + timedelta(int(data) - 1)) if datatemp not in picked_ids["dates"]: picked_ids["ids"].append( cal.calevent_create(datatemp.date(), "Not provided", "message")) picked_ids["dates"].append(datatemp) picked_ids["indexes"].append(data) flagaRandom = False randtxt = "Remove all" # cal._display_calendar() else: flagaRandom = True randtxt = "Select random dates" cal.calevent_remove("all") picked_ids["ids"] = [] picked_ids["dates"] = [] picked_ids["indexes"] = [] if pick_button.winfo_exists(): random_button["text"] = randtxt def date_check(): global prev_date, butText, pick_button, pick_button, startDate, endDate, after2 if prev_date != cal.get_date(): if cal.get_date() == "": my_label.config(text="Select a date") else: my_label.config(text="Selected date: " + cal.get_date()) prev_date = cal.get_date() if cal.get_date() == "": butText = "Pick Date" elif datetime.strptime(cal.get_date(), "%m/%d/%y") in picked_ids["dates"]: butText = "Unpick Date" else: butText = "Pick Date" if pick_button.winfo_exists(): pick_button["text"] = butText if cal.get_date() != "": calendar_date = datetime.strptime(cal.get_date(), "%m/%d/%y").date() if calendar_date > endDate: messagebox.showerror( "Error", f"Selected date must be from {startDate.strftime('%d/%m/%Y')} to {endDate.strftime('%d/%m/%Y')}" ) cal.selection_set(endDate) elif calendar_date < startDate: messagebox.showerror( "Error", f"Selected date must be from {startDate.strftime('%d/%m/%Y')} to {endDate.strftime('%d/%m/%Y')}" ) cal.selection_set(startDate) after2 = root.after(100, date_check) def stop_selecting(): global cal, end_button cal._remove_selection() cal.__setitem__("selectmode", "none") pick_button.destroy() random_button.destroy() end_button["text"] = "Show results" end_button["command"] = results dates = [] for date in picked_ids["dates"]: dates.append(datetime.strftime(date, '%d/%m/%y')) dates = str(dates).replace('\'', '').replace(', ', ', ').replace( '[', '').replace(']', '') my_label.config(text=f"Selected dates: {dates}", wraplength=1000, justify="center") def results(): global picked_ids, startDate, endDate, root, switch, img, loop, after2, CLUSTERS, CLUSTERS_NAMES, CLUSTERS_DATES, PRZEROBIONY, Top, restart_button # ustawienia okna switch = False root.after_cancel(loop) root.after_cancel(after2) Top = tkinter.Toplevel(root, ) Top.configure(background="white") Top.title('Result') Top.grab_set() img = tkinter.Image("photo", file="data/calendar.gif") # root.tk.call('wm', 'iconphoto', root._w, img) style = ttk.Style(Top) style.theme_use('default') # # wyliczamy długość tablicy PERIODICITY = np.zeros( (endDate.timetuple().tm_yday - startDate.timetuple().tm_yday + 1), int) for i in range(PERIODICITY.shape[0]): PERIODICITY[i] = 0 if i + startDate.timetuple( ).tm_yday in picked_ids["indexes"] else i + startDate.timetuple( ).tm_yday # UNIVERSE PERIODICITY = PERIODICITY[PERIODICITY[:] != 0] PRZEROBIONY = np.multiply(CLUSTERS, CLUSTERS_DATES).tolist() NPRZEROBIONY = [] NNAZWY = [] for i in range(len(PRZEROBIONY)): NNAZWY.append(CLUSTERS_NAMES[i]) NPRZEROBIONY.append(set(filter((0).__ne__, PRZEROBIONY[i]))) print("OKRES: ", PERIODICITY) # print("prze",NPRZEROBIONY) wyniki = problem( set(PERIODICITY.copy()), NPRZEROBIONY.copy(), ) msg = "" przerywnik = "," if len(wyniki) > 2 else "plus" exception = "" exceptionplus = "" res = set([]) for wynik in wyniki: idx = NPRZEROBIONY.index(wynik) # print(idx) if msg == "" and NNAZWY[idx][0] != "f": msg += "'" + NNAZWY[idx] + "'" elif msg == "" and NNAZWY[idx][0] == "f": msg += NNAZWY[idx][:5] + "'" + NNAZWY[idx][5:] + "'" elif NNAZWY[idx][0] == "f": msg += przerywnik + " " + NNAZWY[idx][:5] + "'" + NNAZWY[idx][ 5:] + "'" else: msg += f" {przerywnik} '{NNAZWY[idx]}'" res = res | wynik if len(res - set(PERIODICITY)) > 0 or len(set(PERIODICITY) - res) > 0: diffs = [] diffsplus = [] if len(res - set(PERIODICITY)) > 0: diffs = sorted(res - set(PERIODICITY)) difftxt = "with the exception of " if len(set(PERIODICITY) - res) > 0: # print("X") diffsplus = sorted(set(PERIODICITY) - res) diffplus = "plus on " for diff in diffs: datetemp = (datetime(2021, 1, 1) + timedelta(int(diff) - 1)).strftime('%d/%m/%Y') exception += f"{datetemp}" if exception == "" else f", {datetemp}" for diff in diffsplus: datetemp = (datetime(2021, 1, 1) + timedelta(int(diff) - 1)).strftime('%d/%m/%Y') exceptionplus += f"{datetemp}" if exceptionplus == "" else f", {datetemp}" if PERIODICITY.shape[0] != 0: exceptionplus = diffplus + exceptionplus if exceptionplus != "" else "" exception = difftxt + exception if exception != "" else "" preposition = "on" if msg[0] != 'f' else "" lbl = tkinter.Label( Top, text= f"The service is provided {preposition} {msg} from {startDate.strftime('%d/%m/%Y')} to {endDate.strftime('%d/%m/%Y')} {exceptionplus} {exception}", wraplength=300, justify="center").pack(padx=10, pady=10) else: lbl = tkinter.Label( Top, text= f"The service is not provided from {startDate.strftime('%d/%m/%Y')} to {endDate.strftime('%d/%m/%Y')}", wraplength=300, justify="center").pack(padx=10, pady=10) def restart(): global Top, open, butText, randtxt, indexes, picked_ids, flagaRandom def clear(): # for windows if os.name == 'nt': _ = os.system('cls') # for mac and linux(here, os.name is 'posix') else: _ = os.system('clear') clear() flagaRandom = True butText = "Pick Date" randtxt = "Select random dates" indexes = [] picked_ids = { "ids": [], "dates": [], "indexes": [], } Top.destroy() open() restart_button = tkinter.Button(Top, text="Restart program", command=restart).pack(padx=10, pady=10) pick_button = tkinter.Button(root, text=butText, command=grab_date) random_button = tkinter.Button(root, text=randtxt, command=random_events_button) end_button = tkinter.Button(root, text="Finish", command=stop_selecting) if switch: loop = root.after(100, date_check) else: print("[ERROR]") root.after_cancel(loop) loop = None my_label.pack(pady=10) pick_button.pack(pady=10) random_button.pack(pady=10) end_button.pack(padx=100)