how to create from month Gtk.Calendar a week calendar and display the notes in each day in python

走远了吗. 提交于 2020-01-03 06:41:32

问题


I have created a calendar app with month and week view in python. In month view, I can write notes in each day, store them in a dictionary and save the dictionary in to disk so I can read it any time.

Now I am working on week view.I managed to display the week of the month regard the day I have picked from month view (the number of the week and the days, Monday to Sunday).In code, I used Gtk.Label for the number of the week and the days of the week attached them in a Gtk.Grid. Beneath each day I have attached a Gtk.TextView using a for in loop creating a list of Gtk.TextView where is being displayed the notes of each day from month view.Right now I have managed to display only one note each time I pick a day of a week.If I have multiple notes in different days can not display all of them.And here is my question. Below is a snippet of code where the week calendar is updating(def update_week_cal).How to modify the code in loop part, so I can display all the notes in each week I have picked from month view?

    def update_week_cal(self, *args):
        year, month, day = self.calendar.get_date()
        month = month + 1
        today = datetime.date(year, month, day)
        self.page2.remove(self.label)
        self.label = Gtk.Label(str(today.isocalendar()[1]) + "η Εβδομάδα")
        self.page2.attach(self.label, 3, 1, 1, 1)
        dates = list([today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())])
        j = 0
        for days in dates:
            self.labels[j].destroy()
            if days == today:
                self.labels[j] = Gtk.Label()
                self.labels[j].set_markup('<span font = "12" weight = "bold">{0}</span>'.format(days.strftime("%a ""%d/""%m")))
            else:
                self.labels[j] = Gtk.Label(days.strftime("%a ""%d/""%m"))
            self.page2.attach(self.labels[j], j, 2, 1, 1)
            self.page2.remove(self.textviews[j])
            self.textviews[j] = Gtk.TextView()
            self.textviews[j].set_editable(False)
            self.textviews[j].set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
            self.page2.attach(self.textviews[j], j, 3, 1, 1)
            for i in range(7):
                try:
                    if self.text is not None and self.d[(year, month, day)]:
                        x = int(today.strftime("%w"))-1
                        self.textviews[x].get_buffer().set_text(self.text)
                except KeyError:
                    x = int(today.strftime("%w")) - 1
                    self.textviews[x].get_buffer().set_text(self.text)
                    print(i, j, x)

                except TypeError:
                    x = int(today.strftime("%w")) - 1
                    self.textviews[x].get_buffer().set_text(self.text)

            self.show_all()
            j = j + 1

Take into account that I have used the same Gtk.TextBuffer for month and week view. self.text are the notes from month view.

Thanks in advance.


回答1:


Well I managed to display the notes according to date, changing the way of thinking the problem and starting from beginning.The new code is been added at the end of the old one, subtracting this:

            for i in range(7):
                try:
                    if self.text is not None and self.d[(year, month, day)]:
                        x = int(today.strftime("%w"))-1
                        self.textviews[x].get_buffer().set_text(self.text)
                except KeyError:
                    x = int(today.strftime("%w")) - 1
                    self.textviews[x].get_buffer().set_text(self.text)
                    print(i, j, x)

                except TypeError:
                    x = int(today.strftime("%w")) - 1
                    self.textviews[x].get_buffer().set_text(self.text)

The answer to the problem is the below code:

list_of_dates = list(self.d.keys())
list_of_notes = list(self.d.values())
dictionary = dict(zip(list_of_dates, list_of_notes))
for key in dictionary.items():
    date = datetime.date(year=key[0][0], month=key[0][1]+1, day=key[0][2])
    week_of_day = str(date.isocalendar()[1])            
    day_of_week = int(date.strftime("%w"))-1          
    if week == week_of_day:
        self.textviews[day_of_week].get_buffer().set_text(key[1])


来源:https://stackoverflow.com/questions/58250628/how-to-create-from-month-gtk-calendar-a-week-calendar-and-display-the-notes-in-e

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!