Python tkinter 下拉日历控件代码下拉日历控件代码
主要介绍了Python tkinter 下拉日历控件代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
tkinter 下拉日历控件下拉日历控件
网上找的不完善的Tk日历进行修改的,可以快捷的找到并返回日期。
效果如下图,上面的是控件,下面的是调用demo窗口
如下所示:如下所示:
# -*- coding: utf-8 -*-
import calendar
import tkinter as tk
import tkinter.font as tkFont
from tkinter import ttk
datetime = calendar.datetime.datetime
timedelta = calendar.datetime.timedelta
class Calendar:
def __init__(s, point = None, position = None):
# point 提供一个基点,来确定窗口位置
# position 窗口在点的位置 'ur'-右上, 'ul'-左上, 'll'-左下, 'lr'-右下
#s.master = tk.Tk()
s.master = tk.Toplevel()
s.master.withdraw()
fwday = calendar.SUNDAY
year = datetime.now().year
month = datetime.now().month
locale = None
sel_bg = '#ecffc4'
sel_fg = '#05640e'
s._date = datetime(year, month, 1)
s._selection = None # 设置为未选中日期
s.G_Frame = ttk.Frame(s.master)
s._cal = s.__get_calendar(locale, fwday)
s.__setup_styles() # 创建自定义样式
s.__place_widgets() # pack/grid 小部件
s.__config_calendar() # 调整日历列和安装标记
# 配置画布和正确的绑定,以选择日期。
s.__setup_selection(sel_bg, sel_fg)
# 存储项ID,用于稍后插入。
s._items = [s._calendar.insert('', 'end', values='') for _ in range(6)]
# 在当前空日历中插入日期
s._update()
s.G_Frame.pack(expand = 1, fill = 'both')
s.master.overrideredirect(1)
s.master.update_idletasks()
width, height = s.master.winfo_reqwidth(), s.master.winfo_reqheight()
if point and position:
if position == 'ur': x, y = point[0], point[1] - height
elif position == 'lr': x, y = point[0], point[1]
elif position == 'ul': x, y = point[0] - width, point[1] - height
elif position == 'll': x, y = point[0] - width, point[1]
else: x, y = (s.master.winfo_screenwidth() - width)/2, (s.master.winfo_screenheight() - height)/2
s.master.geometry('%dx%d+%d+%d' % (width, height, x, y)) #窗口位置居中
s.master.after(300, s._main_judge)
s.master.deiconify()
s.master.focus_set()
s.master.wait_window() #这里应该使用wait_window挂起窗口,如果使用mainloop,可能会导致主程序很多错误
def __get_calendar(s, locale, fwday):
# 实例化适当的日历类
if locale is None:
return calendar.TextCalendar(fwday)
else:
return calendar.LocaleTextCalendar(fwday, locale)
def __setitem__(s, item, value):
if item in ('year', 'month'):
raise AttributeError("attribute '%s' is not writeable" % item)
elif item == 'selectbackground':
评论5
最新资源