2011-10-24 3 views
0

다른 위젯과 함께 GtkMenuBar를 배치 할 수 있습니까? 그 창 상단에 표시하는 대신 GtkMenuBar를 배치 할 수 있습니까?다른 위젯과 GtkMenuBar를 병행 하시겠습니까?

버튼을 사용할 수 있지만 버튼 위로 마우스를 가져 가면 버튼의 메뉴가 menu처럼 작동하지 않습니다. 즉, menu item에 가까울 때 메뉴가 직접 팝 다운됩니다. , 클릭 및 기타 자동으로 숨기기. 그런 버튼을 만들 수 있습니까? 또는 가질 수있는 다른 위젯은 label , image , and pop down menu item입니다.

모든 아이디어에 감사드립니다.

답변

1

버튼에 연결된 "enter-notify-event"및 "leave-notify-event"가 예를 들어 팝업 메뉴 표시 및 숨기기와 같은 작업을 수행하는 데 도움이 될 수 있습니다.


마침내 사람들은 "입력"및 이벤트 그 동작이 조금 복잡하고, 단지 "모션 통지 이벤트"사용 "을두고"잊었

편집 ...

이제 내가 원하는대로되기를 바랍니다!

#!/usr/bin/env python 
import pygtk 
pygtk.require('2.0') 
import gtk 

class MenuExample: 
    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.set_size_request(200, 100) 
     self.window.set_title("GTK Menu Test") 
     self.window.connect("delete_event", lambda w,e: gtk.main_quit()) 

     # A vbox to put a button in: 
     vbox = gtk.VBox(False, 0) 
     self.window.add(vbox) 
     vbox.show() 
     self.popped = False 

     # Create a button to simulate a menu 
     button = gtk.Button("press me") 
     vbox.pack_start(button, False, False, 2) 
     self.window.add_events(gtk.gdk.POINTER_MOTION_MASK) 
     self.window.connect("motion-notify-event", self.wakeup) 
     self.window.show_all() 
     self.bmenu = gtk.Button("A single entry menu") 
     self.bmenu.connect("clicked", self. menuitem_response, "Click on the magic menu !") 
     vbox.pack_start(self.bmenu, False, False, 2) 

    def wakeup(self, widget, event): 
     #print "Event number %d woke me up" % event.type 
     (x, y) = self.window.get_pointer() 
     if y < 30: 
      if self.popped == False: 
       self.popped = True 
       self.bmenu.show() 
     elif y > 60: 
      if self.popped == True: 
       self.popped = False 
       self.bmenu.hide() 

    # Print a string when a menu item is selected 
    def menuitem_response(self, widget, string): 
     print "%s" % string 

def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    MenuExample() 
    main() 
+0

샘플을 제공해 주시겠습니까? 나는 그 버튼에 "leave-notify-event"를 연결하고 그것을 클릭하면 메뉴도 보이지 않을 것이고 너무 많은 이벤트가이 이벤트에 넘쳐 흐른다. 게다가, 만약 내가 enter 이벤트를 연결하면, 메뉴를 보여주기 위해서, 내 프로그램은 너무 많은 이벤트가 막혀 버릴 것이다. – daisy

+0

지연을 위해 미안하다 ... 나의 편집을보고 즐겨라! – Louis

+0

유선, 출력 없음, 오류 없음, 창 없음, 전체 텍스트 복사,'main.py'에 넣기,'python main.py' 시도 – daisy

관련 문제