Удаление столбца «Номер недели» в виджете календаря в Python - PullRequest
0 голосов
/ 05 июня 2018

У меня есть простой виджет Calendar и DateEntry из tkcalendar на Python, который работает нормально и отображает результаты, как показано ниже.

Я делаю не хотите, чтобы в календаре отображался столбец «Номер недели» [или дополнительная нижняя строка с неделей следующего месяца] - я пытался использовать « showWeeks = False », но, похоже, несделайте свое дело.

review_date_entry = DateEntry(dates_panel, 
                              textvariable=self.review_date,
                              showWeeks = False)

Я понимаю, что любые параметры настройки для виджета Календарь работают и для виджета DateEntry, поэтому любые предложения будут оценены, нужны все предложения, которые я могу получить.Спасибо!

Код для календаря и даты ввода ниже:

try:
    import tkinter as tk
    from tkinter import ttk
except ImportError:
    import Tkinter as tk
    import ttk

from tkcalendar import Calendar, DateEntry

def example1():
    def print_sel():
        print(cal.selection_get())

    top = tk.Toplevel(root)

    cal = Calendar(top,
                   font="Arial 14", selectmode='day',
                   cursor="hand1", year=2018, month=2, day=5)
    cal.pack(fill="both", expand=True)
    ttk.Button(top, text="ok", command=print_sel).pack()

def example2():
    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)

root = tk.Tk()
s = ttk.Style(root)
s.theme_use('clam')

ttk.Button(root, text='Calendar', command=example1).pack(padx=10, pady=10)
ttk.Button(root, text='DateEntry', command=example2).pack(padx=10, pady=10)

root.mainloop()

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Документация плохая, вам нужно копаться в исходном коде .

Столбец с номером недели соответствует списку wlabel (экземпляр ttk.Label()) с именем _week_nbs.Таким образом, вы можете зациклить их и уничтожить их один за другим:

for i in range(6):
    cal._week_nbs[i].destroy()

Полная программа:

try:
    import tkinter as tk
    from tkinter import ttk
except ImportError:
    import Tkinter as tk
    import ttk

from tkcalendar import Calendar, DateEntry

def example1():
    def print_sel():
        print(cal.selection_get())

    top = tk.Toplevel(root)

    cal = Calendar(top,
                   font="Arial 14", selectmode='day',
                   cursor="hand1", year=2018, month=2, day=5)
    cal.pack(fill="both", expand=True)
    for i in range(6):
       cal._week_nbs[i].destroy()
    ttk.Button(top, text="ok", command=print_sel).pack()

def example2():
    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)

root = tk.Tk()
s = ttk.Style(root)
s.theme_use('clam')

ttk.Button(root, text='Calendar', command=example1).pack(padx=10, pady=10)
ttk.Button(root, text='DateEntry', command=example2).pack(padx=10, pady=10)

root.mainloop()

Демонстрация:

enter image description here

0 голосов
/ 05 июня 2018

К сожалению, это не вариант.В методе __init__ для tkcalendar всегда добавляются номера недели , независимо от того, какие параметры есть:

    ...
    self._week_nbs = []
    self._calendar = []
    for i in range(1, 7):
        self._cal_frame.rowconfigure(i, weight=1)
        wlabel = ttk.Label(self._cal_frame, style='headers.%s.TLabel' % self._style_prefixe,
                           font=self._font, padding=2,
                           anchor="e", width=2)
        self._week_nbs.append(wlabel)
        wlabel.grid(row=i, column=0, sticky="esnw", padx=(0, 1))
        self._calendar.append([])
        for j in range(1, 8):
            label = ttk.Label(self._cal_frame, style='normal.%s.TLabel' % self._style_prefixe,
                              font=self._font, anchor="center")
            self._calendar[-1].append(label)
            label.grid(row=i, column=j, padx=(0, 1), pady=(0, 1), sticky="nsew")
            if selectmode is "day":
                label.bind("<1>", self._on_click)

Возможно, вы захотите попробовать другие виджеты в соответствии с предложением здесь , похоже, что ttkcalendar не будет иметь номера недели.

...