ОБНОВЛЕНИЕ: я исправил проблему и опубликовал новую версию tkcalendar. .
EDIT: проблема в том, что в Windows раскрывающийся список не открывается при нажатии кнопки со стрелкой вниз. Кажется, это исходит из темы ttk по умолчанию для Windows, потому что она работает с другими темами. Таким образом, обходной путь состоит в том, чтобы переключить тему и использовать, например, «моллюск» («alt» также должен работать). Тем временем я посмотрю на это и посмотрю, смогу ли я исправить DateEntry
для других тем и выпустить новую версию (https://github.com/j4321/tkcalendar/issues/3).
Я не уверен, чего именно вы хотите добиться с помощью DateEntry
, но если ваша цель состоит в том, чтобы сделать его похожим на тот, что на картинке, это можно сделать следующим образом:
import tkinter as tk
from tkinter import ttk
from tkcalendar import DateEntry
from datetime import date
root = tk.Tk()
# change ttk theme to 'clam' to fix issue with downarrow button
style = ttk.Style(root)
style.theme_use('clam')
class MyDateEntry(DateEntry):
def __init__(self, master=None, **kw):
DateEntry.__init__(self, master=None, **kw)
# add black border around drop-down calendar
self._top_cal.configure(bg='black', bd=1)
# add label displaying today's date below
tk.Label(self._top_cal, bg='gray90', anchor='w',
text='Today: %s' % date.today().strftime('%x')).pack(fill='x')
# create the entry and configure the calendar colors
de = MyDateEntry(root, year=2016, month=9, day=6,
selectbackground='gray80',
selectforeground='black',
normalbackground='white',
normalforeground='black',
background='gray90',
foreground='black',
bordercolor='gray90',
othermonthforeground='gray50',
othermonthbackground='white',
othermonthweforeground='gray50',
othermonthwebackground='white',
weekendbackground='white',
weekendforeground='black',
headersbackground='white',
headersforeground='gray70')
de.pack()
root.mainloop()
Я создал класс, унаследованный от DateEntry
, чтобы добавить метку с сегодняшней датой под календарем и создать черную рамку вокруг раскрывающегося списка (self._top_cal
— это Toplevel
, содержащий календарь).
Затем я создал экземпляр MyDateEntry
со всеми параметрами календаря, необходимыми, чтобы он выглядел как на картинке. Кроме того, я использовал параметры year
, month
, day
для определения начальной даты внутри записи. Вот результат:
person
j_4321
schedule
17.01.2018
root
(вf1=..
перед его определением) - person j_4321   schedule 17.01.2018DateEntry
не имеет ключевого словаCalendar
, просто передайте ключевые слова календаря напрямую. - person j_4321   schedule 17.01.2018Calendar( ..., year=2018)
иDateEntry( ... year=2018)
- person furas   schedule 17.01.2018DateEntry
дает результат, очень похожий на тот, что на картинке, календарь появляется, когда пользователь нажимает кнопку со стрелкой. - person j_4321   schedule 17.01.2018