Hiển thị gtk.Calendar trong menu?
Tôi muốn tạo một menu ngữ cảnh với mục menu để chọn ngày. (Trường hợp sử dụng đang chọn một loạt các mục trong một lần xem trang và sau đó đặt ngày hết hạn mới cho tất cả các mục.)
Vì một menuitem là Gtk.Bin, tôi có thể chỉ định bất kỳ tiện ích nào thay cho nhãn. Tuy nhiên, tôi không thể hiển thị tương tác với tiện ích. Nếu tôi nhấp vào bất kỳ nơi nào trên menu, menuitem sẽ nhận được nhấp chuột. Vì vậy, tôi không thể chọn một ngày cụ thể, cũng không thể điều hướng tháng hoặc năm. Làm cách nào để lịch có được hoạt động của chuột?
Ngoài ra, có đệm không liên quan xung quanh bên ngoài lịch và khi được di chuột qua nó sẽ chuyển thành màu cam. Làm thế nào tôi có thể loại bỏ các padding và/hoặc không làm nổi bật màu da cam?
#!/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()
[Cập nhật]
gì tôi sẽ là một cái gì đó giống như ngày đơn chỉ số của Ubuntu/thời gian lịch.
Thật xấu xí, vì không có mục menu nào khác, tại sao bạn chỉ cần đặt Lịch bên trong cửa sổ bật lên? – saeedgnu
Bạn cũng có thể đặt nhiều nút hoặc thậm chí một thanh công cụ trong cửa sổ bật lên đó (nếu bạn muốn có nhiều hành động hơn trong cửa sổ bật lên) – saeedgnu
Tôi đã thử một cách tiếp cận cửa sổ bật lên trước tiên, nhưng nhận được menu bật lên được định vị chính xác. , đặc biệt là xem xét kích thước của trình đơn có thể khác nhau tùy thuộc vào tùy chọn ngôn ngữ và phông chữ của người dùng, v.v. Tôi giữ nó như là một lựa chọn dự phòng nếu không thể thực hiện ở trên để làm việc. – bryce