更新:我已经解决了这个问题并发布了一个新版本的tkcalendar。
编辑:问题是在 Windows 中,单击向下箭头按钮时下拉菜单不会打开。它似乎来自 Windows 的默认 ttk 主题,因为它适用于其他主题。因此,解决方法是切换主题并使用“clam”(例如,“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
选项来定义条目中的初始日期。结果如下: