Einen gtk.Calendar in einem Menü anzeigen?
Ich möchte ein Kontextmenü mit einem Menüpunkt zur Auswahl eines Datums erstellen. (Der Anwendungsfall ist die Auswahl einer Reihe von Elementen in einer Baumansicht und dann die Festlegung eines neuen Fälligkeitsdatums für alle Elemente.)
Da ein Menüeintrag ein Gtk.Bin ist, kann ich jedes Widget anstelle eines Labels angeben. Allerdings kann ich mit dem Widget nicht scheinen. Wenn ich irgendwo auf das Menü klicke, erhält der Menüeintrag den Klick. Also kann ich weder ein bestimmtes Datum auswählen noch Monate oder Jahre navigieren. Wie kann ich erreichen, dass der Kalender die Mausaktivität erhält?
Es gibt auch äußere Polsterung an der Außenseite des Kalenders, und wenn man darüber schwebt, wird es orange. Wie kann ich die Polsterung entfernen und/oder nicht das orange Highlight?
#!/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()
[Update]
Was denn ich werde so etwas wie Ubuntu Anzeige Menü Datum/Uhrzeit Kalender.
Das ist hässlich, da es keine Menüpunkte mehr gibt, warum du den Kalender einfach in ein Popup-Fenster legst? – saeedgnu
Sie können auch viele Schaltflächen oder sogar eine Werkzeugleiste in dieses Popup-Fenster einfügen (wenn Sie mehr Aktionen im Popup haben wollen) – saeedgnu
Ich habe zuerst versucht, ein Popup-Fenster Ansatz, aber das Popup-Menü richtig positioniert sah aus wie es zu schwierig wäre insbesondere, wenn man bedenkt, dass die Abmessungen des Menüs je nach Sprache und Schriftart des Benutzers usw. variieren können. Ich behalte das als Fallback-Option, wenn das obige nicht funktionieren kann. – bryce