开发者社区> 问答> 正文

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

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

现在我正在使用周视图。我设法显示了从月视图中选择的日期的月份中的星期(星期几和星期一至星期日的天数)。在代码中,我使用Gtk.Label了一周和一周中的几天将它们附加在一个Gtk.Grid。在每一天的下面,我都Gtk.TextView使用一个for in循环附加了一个循环,该循环创建了一个Gtk.TextView从月视图显示每天笔记的列表。现在,我每次选择一周中的某一天都只能显示一个笔记。不同日期的多个笔记不能全部显示。这是我的问题。以下是周历为update(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.TextBuffer在月视图和周视图中都使用了相同的视图。 self.text是月份视图中的注释。

提前致谢。

展开
收起
祖安文状元 2020-01-07 14:21:32 629 0
1 条回答
写回答
取消 提交回答
  • 问题的答案是以下代码:

    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])
    
    2020-01-07 14:21:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载