Wyświetlasz plik gtk.Calendar w menu?

Chcę zbudować menu kontekstowe z pozycją menu, aby wybrać datę. (Przypadek użycia to wybranie wiązki elementów w widoku drzewa, a następnie ustawienie nowej daty wymagalności dla wszystkich elementów).

Ponieważ menuitem jest Gtk.Bin, mogę określić dowolny widget zamiast etykiety. Jednak nie wydaje mi sięoddziaływać z widżetem. Jeśli kliknę w dowolnym miejscu menu, menu zostanie kliknięte. Więc nie mogę wybrać konkretnej daty ani nawigować po miesiącach lub latach. Jak sprawić, by kalendarz odbierał aktywność myszy?

Poza tym wokół zewnętrznej strony kalendarza znajduje się obfite obicie, a po najechaniu na niego zmienia się na pomarańczowy. Jak mogę usunąć dopełnienie i / lub nie zaznaczać pomarańczowego podświetlenia?

#!/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()

[Aktualizacja]

To, co zamierzam, jest czymś podobnym do kalendarza daty / czasu menu Ubuntu.

questionAnswers(1)

yourAnswerToTheQuestion