Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » ttkcalendar: создание всплывающей формы с календарем [RSS Feed]

#1 Янв. 22, 2011 23:06:05

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

ttkcalendar: создание всплывающей формы с календарем

Доброго времени суток!
Есть форма, обрабатывающая определенный период. Период задается двумя полями типа Entry. Обработка данных ведется достаточно часто, поэтому использование ввода с клавы порядком надоело. Хочу сделать ввод данных с календаря. Нашел в интернете ttkcalendar. А дальше возникли проблемы: я могу поставить 2 календаря в форму и через calendar.selection подучить выделенные даты. Но
1) не могу понять, как там задавать дату по-умолчанию (что бы при открытии календаря уже была выделена какая-то заданная дата)
2) на форме мало места и в идеале эти календари лучше вообще убрать, оставить только поля с датой но так, что бы при щелчке на поле открывался рядом календарь, который бы после щелчка по дате возвращал полученной значение обратно в поле, а сам закрывался.
Опыта, к сожалению, не хватает для реализации.
Сталкивался ли кто с подобной задачей и как её решили?



Офлайн

#2 Янв. 25, 2011 13:19:55

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

ttkcalendar: создание всплывающей формы с календарем

Этот календарь что ли?

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

locale, firstweekday, year, month, selectbackground,
selectforeground
А следовательно надо всего лишь задать параметры month и year.

upd: чего действительно не хватает, так это колбэка на выбор даты.



Отредактировано (Янв. 25, 2011 13:38:18)

Офлайн

#3 Янв. 25, 2011 21:39:18

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

ttkcalendar: создание всплывающей формы с календарем

именно этот. В том то и дело, что конкретную дату выбрать нельзя - только месяц и год (по крайней мере, мне не понятно, как здесь можно это сделать, не модифицируя код) .



Офлайн

#4 Янв. 26, 2011 09:26:52

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

ttkcalendar: создание всплывающей формы с календарем

Насколько я вижу, на данный момент класс не реализует таких возможностей. Но можно добавить:

    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()
Лучше конечно добавить ключ в конструктор.

Хотя вообще метод выделения c помощью Canvas мне кажется перебором. Уверен, что с помощью Style().map можно установить background ячейки значением (“selected”, my_color_here)



Отредактировано (Янв. 26, 2011 09:35:50)

Офлайн

  • Начало
  • » GUI
  • » ttkcalendar: создание всплывающей формы с календарем[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version