Warum wird die aktuelle Datumsnummer nicht in einem Tkcalendar angezeigt, das nur auf ausgewählte Montagwochentage besch
Posted: 05 Mar 2025, 08:16
Ich habe einen TKCalendar erstellt, um den Benutzer einzuschränken, indem ich nur die Auswahl von Montags aktiviert habe. (Der Code basiert auf Code, das zuvor von J_4321 eingereicht wurde und die Auswahl von Mittwochs und Freitags ermöglichte.) Wenn der TKCalendar angezeigt wird, ist das Standardfeld "Standard) des Standards leer (kein Tag der Monatsnummer). Wenn ich auf ein Montagsdatum klicke (die einzige Auswahl möglich), wird die Auswahl hervorgehoben, und das aktuelle Datumsfeld zeigt jetzt die richtige Nummer an. Ist es auch möglich, dass die aktuelle Datumsnummer als mutige Schriftart angezeigt wird (und weiterhin als mutig angezeigt wird, egal auf welche andere Auswahl, auf die der Benutzer klickt)?
tkcalendar1
tkcalendar2
Code: Select all
import tkinter as tk
import tkcalendar as tkc
import calendar
class MyCalendar(tkc.Calendar):
def __init__(self, master=None, allowed_weekdays=(calendar.MONDAY,), **kw):
self._select_only = allowed_weekdays
tkc.Calendar.__init__(self, master, **kw)
# change initially selected day if not right day
if self._sel_date and not (self._sel_date.isoweekday() - 1) in allowed_weekdays:
year, week, wday = self._sel_date.isocalendar()
# get closest weekday
next_wday = max(allowed_weekdays, key=lambda d: (d - wday + 1) > 0) + 1
sel_date = self.date.fromisocalendar(year, week + int(next_wday < wday), next_wday)
print("sel_date: ", sel_date)
self.selection_set(sel_date)
def _display_calendar(self):
# display calendar
tkc.Calendar._display_calendar(self)
# disable not allowed days
for i in range(6):
for j in range(7):
if j in self._select_only:
continue
self._calendar[i][j].state(['disabled'])
root = tk.Tk()
root.title("Select a Monday date:")
# I had to select TUESDAY instead of MONDAY because I reordered the weeks starting on Sun instead of Mon
cal = MyCalendar(root, firstweekday='sunday', allowed_weekdays=(calendar.TUESDAY,), selectmode='day', locale='en_US',
font='Arial 14', showweeknumbers=False, showothermonthdays = False, weekendbackground='white',
weekendforeground='black', othermonthbackground='gray95', othermonthwebackground='gray95',
othermonthforeground='black', othermonthweforeground='black')
cal.pack()
root.mainloop()
tkcalendar2