Python Tkinter ttk日历

时间:2018-01-17 09:56:54

标签: python tkinter ttk

我正在尝试为日期条目创建下拉日历。 以下是我的代码的一部分:

它的下拉部分无法正常工作,我无法在任何地方找到DateEntry() ttk日历的语法,以包含日历窗口小部件选项!

#creating the frame 
from tkinter import *
from tkcalendar import *

root = Tk()

f1=Frame(root,width=1500,height=100,relief=SUNKEN,bd=4,bg='light steel blue')
f1.pack(side=TOP)
f2=Frame(root,width=1500,height=550,relief=SUNKEN,bd=4,bg='white')
f2.pack()
f3=Frame(root,width=1600,height=100,relief=SUNKEN,bd=4,bg='white')
f3.pack(side=BOTTOM)


#Creating the date column
l4=Label(f2,text='DATE',font=('tahoma',20,'bold'),fg='black',anchor='w')
l4.grid(row=0,column=3)

cal=DateEntry(f2,dateformat=3,width=12, background='darkblue',
                    foreground='white', borderwidth=4,Calendar =2018)
cal.grid(row=1,column=3,sticky='nsew')

我希望它看起来像这样: screenshot

1 个答案:

答案 0 :(得分:2)

更新:我已解决此问题,并发布了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是{{1包含日历)。

然后,我创建了一个Toplevel的实例,并使用所有日历选项使其看起来像图片。此外,我使用MyDateEntryyearmonth选项来定义条目中的初始日期。 结果如下:

screenshot