Отображение gtk.Calendar в меню?

calendar-menu-screenshot

Я хочу построить контекстное меню с пунктом меню для выбора даты. (Вариант использования: выбор набора элементов в виде дерева и установка новой даты выполнения для всех элементов.)

Поскольку пункт меню является Gtk.Bin, я могу указать любой виджет вместо метки. Тем не менее, я не могуinteract с виджетом. Если я щелкаю в любом месте меню, пункт меню получает щелчок. Таким образом, я не могу выбрать конкретную дату, ни перемещаться по месяцам или годам. Как я могу заставить календарь получать мышиную активность?

Кроме того, вокруг календаря есть посторонние отступы, а при наведении на них он становится оранжевым. Как я могу удалить отступы и / или не сделать оранжевую подсветку?

#!/usr/bin/env python

import gobject
import pygtk
pygtk.require('2.0')
import gtk
import time


class ContextMenu(gtk.Menu):
    def __init__(self):
        gtk.Menu.__init__(self)

    def add_calendar_submenu_item(self, text, callback, uuids, data=None):
        calendar = gtk.Calendar()
        calendar.show()
        calendar_item = gtk.MenuItem()
        calendar_item.add(calendar)
        calendar_item.show()

        submenu = gtk.Menu()
        submenu.append(calendar_item)
        submenu_item = gtk.MenuItem("%s..." %(text))
        submenu_item.set_submenu(submenu)
        submenu_item.show()
        submenu_item.connect("activate", self.on_calendar_activate)
        self.append(submenu_item)

    def on_calendar_activate(self, widget):
        print "activate"


if __name__ == "__main__":
    class CalendarExample:
        def __init__(self):
            window = gtk.Window(gtk.WINDOW_TOPLEVEL)
            window.set_title("Calendar Example")
            window.set_border_width(5)
            window.set_size_request(200, 100)
            window.set_resizable(False)
            window.stick()
            window.connect("destroy", lambda x: gtk.main_quit())

            menu = ContextMenu()
            menu.add_calendar_submenu_item("date", self.on_date, ['123'])

            root_menu = gtk.MenuItem("Calendar Menu")
            root_menu.show()
            root_menu.set_submenu(menu)

            vbox = gtk.VBox(False, 10)
            window.add(vbox)
            vbox.show()

            menu_bar = gtk.MenuBar()
            vbox.pack_start(menu_bar, False, False, 2)
            menu_bar.append (root_menu)
            menu_bar.show()

            button = gtk.Button("Push Me")
            button.connect("clicked", self.on_menu_push, menu)
            vbox.pack_start(button, False, True, 10)
            button.show()

            window.show()

        def on_menu_push(self, widget, menu):
            menu.popup(None, None, None, 0, 0)

        def on_action(self, widget, uuids, text):
            print "Item %s pressed" %(text)

        def on_date(self, widget, uuids, text):
            print "Calendar activated with %s" %(text)

    CalendarExample()
    gtk.main()

[Обновить]

То, к чему я стремлюсь, является чем-то похожим на календарь даты / времени меню индикатора Ubuntu.

Ubuntu Calendar

Ответы на вопрос(1)

Ваш ответ на вопрос