Einen gtk.Calendar in einem Menü anzeigen?

Ich möchte ein Kontextmenü mit einem Menüpunkt zur Auswahl eines Datums erstellen. (Der Anwendungsfall besteht darin, eine Reihe von Elementen in einer Baumansicht auszuwählen und dann ein neues Fälligkeitsdatum für alle Elemente festzulegen.)

Da ein Menüpunkt ein Gtk.Bin ist, kann ich anstelle einer Bezeichnung ein beliebiges Widget angeben. Ich kann es jedoch nicht scheineninteragieren mit dem Widget. Wenn ich irgendwo in das Menü klicke, erhält das Menü den Klick. Daher kann ich weder ein bestimmtes Datum auswählen noch in Monaten oder Jahren navigieren. Wie kann ich dafür sorgen, dass der Kalender die Mausaktivität abruft?

Außerdem ist der Kalender außen mit einem überflüssigen Polster versehen, und wenn Sie den Mauszeiger darüber halten, wird er orange. Wie kann ich die Polsterung entfernen und / oder die orange Markierung nicht machen?

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

[Aktualisieren]

Was ich anstrebe, ist so etwas wie der Datums- / Zeitkalender des Ubuntu-Indikatormenüs.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage