-
Notifications
You must be signed in to change notification settings - Fork 0
/
choosedate.py
121 lines (84 loc) · 2.99 KB
/
choosedate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from Tkinter import *
from ttk import *
import os
import datetime
import calendar
class Dialog(Toplevel):
def __init__(self, parent, title = None):
Toplevel.__init__(self, parent)
self.transient(parent)
if title:
self.title(title)
self.parent = parent
self.result = None
body = Frame(self)
self.initial_focus = self.body(body)
body.pack(padx=5, pady=5)
self.buttonbox()
self.grab_set()
if not self.initial_focus:
self.initial_focus = self
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
parent.winfo_rooty()+50))
self.initial_focus.focus_set()
self.wait_window(self)
#
# construction hooks
def body(self, master):
# create dialog body. return widget that should have
# initial focus. this method should be overridden
Label(master, text = 'Date: ').grid(row=0, sticky=W)
today = datetime.date.today()
oneday = datetime.timedelta(days=1)
onemonth = datetime.timedelta(days=30)
startday = today - onemonth
entryday = today
entries = []
while entryday != startday:
humanform = entryday.strftime('%d %b %y')
entries.append(humanform)
## dateobjlist.append(entryday) # Create a calendar list
entryday -= oneday
self.sp = StringVar()
self.sp.set(entries[0])
self.spb = Combobox(master, values = entries, textvariable = self.sp)
self.spb.grid(row=0, column=1)
def buttonbox(self):
# add standard button box. override if you don't want the
# standard buttons
box = Frame(self)
w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
w.pack(side=LEFT, padx=5, pady=5)
w = Button(box, text="Cancel", width=10, command=self.cancel)
w.pack(side=LEFT, padx=5, pady=5)
self.bind("<Return>", self.ok)
self.bind("<Escape>", self.cancel)
box.pack()
#
# standard button semantics
def ok(self, event=None):
if not self.validate():
self.initial_focus.focus_set() # put focus back
return
self.withdraw()
self.update_idletasks()
try:
self.apply()
except ValueError: # nonsense in the box
pass
self.cancel()
def cancel(self, event=None):
# put focus back to the parent window
self.parent.focus_set()
self.destroy()
#
# command hooks
def validate(self):
return 1 # override
def apply(self):
cdate = self.sp.get()
cdate = datetime.datetime.strptime(cdate, '%d %b %y')
cdate = cdate.date()
self.result = cdate
## http://www.pythonware.com/library/tkinter/introduction/dialog-windows.htm