Форум сайта python.su
Доброго времени суток!
Есть форма, обрабатывающая определенный период. Период задается двумя полями типа Entry. Обработка данных ведется достаточно часто, поэтому использование ввода с клавы порядком надоело. Хочу сделать ввод данных с календаря. Нашел в интернете ttkcalendar. А дальше возникли проблемы: я могу поставить 2 календаря в форму и через calendar.selection подучить выделенные даты. Но
1) не могу понять, как там задавать дату по-умолчанию (что бы при открытии календаря уже была выделена какая-то заданная дата)
2) на форме мало места и в идеале эти календари лучше вообще убрать, оставить только поля с датой но так, что бы при щелчке на поле открывался рядом календарь, который бы после щелчка по дате возвращал полученной значение обратно в поле, а сам закрывался.
Опыта, к сожалению, не хватает для реализации.
Сталкивался ли кто с подобной задачей и как её решили?
Офлайн
Этот календарь что ли?
class Calendar(ttk.Frame):
# XXX ToDo: cget and configure
datetime = calendar.datetime.datetime
timedelta = calendar.datetime.timedelta
def __init__(self, master=None, **kw):
"""
WIDGET-SPECIFIC OPTIONS
locale, firstweekday, year, month, selectbackground,
selectforeground
WIDGET-SPECIFIC OPTIONSА следовательно надо всего лишь задать параметры month и year.
locale, firstweekday, year, month, selectbackground,
selectforeground
Отредактировано (Янв. 25, 2011 13:38:18)
Офлайн
именно этот. В том то и дело, что конкретную дату выбрать нельзя - только месяц и год (по крайней мере, мне не понятно, как здесь можно это сделать, не модифицируя код) .
Офлайн
Насколько я вижу, на данный момент класс не реализует таких возможностей. Но можно добавить:
def set_day(self, day):
for row in range(2, 8):
text_row = 'I00%s' % row
for column in range(1, 8):
text_column = '#%s' % column
curr_row_values = self._calendar.item(text_row)['values']
if not curr_row_values: # empty row
continue
curr_day = curr_row_values[column-1]
if curr_day == '': # empty value for this month
continue
text = '%02d' % int(curr_day)
if day == curr_day:
if not self._calendar.bbox(text_row, text_column): # calendar not visible yet
return
self._selection = (text, text_row, text_column)
self._show_selection(text, self._calendar.bbox(text_row, text_column))
def test():
import sys
root = Tkinter.Tk()
root.title('Ttk Calendar')
ttkcal = Calendar(root, firstweekday=calendar.SUNDAY)
ttkcal.pack(expand=1, fill='both')
ttk.Button(root, text="asdf", command=lambda:ttkcal.set_day(10)).pack()
if 'win' not in sys.platform:
style = ttk.Style()
style.theme_use('clam')
import time
root.mainloop()
Отредактировано (Янв. 26, 2011 09:35:50)
Офлайн