如何从 Gtk.Calendar 月创建一个星期日历并显示 python 中每一天的注释

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

我在 python 中创建了一个具有月视图和周视图的日历应用程序。 在月视图中,我可以每天写笔记,将它们存储在字典中,并将字典保存到磁盘中,以便随时阅读。

现在我正在工作一周 view.I 设法显示一个月中的第几周关于我从月视图中选择的那一天(周数和天数,周一到周日)。在代码中,我使用 Gtk.Label 作为周数和星期几,将它们附加在 Gtk.Grid 中。在每天的下面,我使用 for in 循环附加了一个 Gtk.TextView,创建了一个 Gtk.TextView 的列表,其中显示了从 view.Right 月开始的每一天的笔记,现在我已经设法做到了每次我选择一天 week.If 时只显示一个注释 我在不同的日期有多个注释无法显示所有 them.And 这是我的问题。 下面是更新周历的代码片段(def update_week_cal)。如何修改循环部分的代码,以便我可以显示从月视图中选择的每周的所有笔记?

    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

考虑到我对月视图和周视图使用了相同的 Gtk.TextBufferself.text 是月视图的笔记。

提前致谢。

好吧,我设法根据日期显示注释,改变了思考问题的方式并从 beginning.The 开始,在旧代码的末尾添加了新代码,减去这个:

            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)

问题的答案是下面的代码:

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])