2014-05-19 3 views
0

이유가 무엇인지 모르겠습니다. menuitem을 활성화 할 수 없습니다. 내 함수 핸들러를 여러 번 연결하려고 시도했다. 신호 : "activate", "activate-item", "notify :: active", "selected". 그러나 아무도 일하지 않았다.Gtk.MenuItem "activate"신호가 작동하지 않습니다.

나는 Glade을 사용하여 을 사용하고 있습니다. 내 menubar의 샷을 첨부합니다 (단결 윈도우 관리자에서 창 바에 menubar가 표시됨 : 애플리케이션 창 내부에 있어야 함).

enter image description here

내가 신호 처리기에 사용하는 코드는 매우 간단하다 :

<object class="GtkMenuBar" id="menubar1"> 
    <property name="visible">True</property> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkMenuItem" id="menuitem1"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="label" translatable="yes">_File</property> 
     <property name="use_underline">True</property> 
     </object> 
    </child> 
    <child> 
     <object class="GtkMenuItem" id="menuitem2"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="label" translatable="yes">_Modifica</property> 
     <property name="use_underline">True</property> 
     </object> 
    </child> 
    <child> 
     <object class="GtkMenuItem" id="menuitem3"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="label" translatable="yes">_Visualizza</property> 
     <property name="use_underline">True</property> 
     </object> 
    </child> 
    </object> 

왜 ISN '다음은 습지 파일에서 XML 코드 아래

builder.get_object('menuitem3').connect('activate', self.useless_method) 
builder.get_object('window1').show() 

이 일하는거야?!?

+0

Gtk.Menu 객체가 생성 된 코드를 보여 주시겠습니까? – luciomrx

+0

방금 ​​추가 한 바, 뭔가 잘못된 것을 찾을 수 있기를 바랍니다. – FrancescoN

답변

0

당신의 glade 파일에는 아무런 문제가 없습니다. 나는 그것을 열심히 코딩했고 효과가 있었다. 하지만 'menuitem3'은 최상위 메뉴이므로 신호를 연결하려는 이유는 무엇입니까? 아마도 연결된 기능일까요?

편집 (코드) :에서 신호

def useless_method(menuitem): <<< edited, note below 

    print 'I am %s' % str(menuitem) <<< note below 


builder = Gtk.Builder() 
builder.add_from_file('menuitem.glade') 

builder.get_object('menuitem3').connect('activate', useless_method) 
builder.get_object('window1').show_all() 

Gtk.main() 

인수 '. 포인터 데이터를 1 개 인자 만한다 "Gtk.MenuItem 당신은 그들 중 세 넣을 필요가 없다.'자기 '를 제외하고는 'args()'를 단독으로 전달할 수는 있지만 menuitem3을 선택하여 Gtk 객체를 전달한 것을 정확히 나타낼 수 있습니다. 위젯은 문자열로 인쇄됩니다. 파이썬에서는 여전히 인쇄합니다 (예 : 콘솔) Gtk.MenuItem (# 3)이있는 메모리 주소 마지막으로 'menuitem3'이 최상위 메뉴이기 때문에 첫 번째 클릭에 대한 메커니즘이 메뉴를 삭제합니다 (메뉴가 없으므로 아무렇지도 않은 것처럼 ng) 두 번째 클릭하면 신호가 활성화되고 그 기능이 무언가를 할 것입니다. 그래서 두 번 클릭하면 트리거됩니다. 너무 많은 설명을 드려 죄송합니다.

+0

글 레이드 버전을 사용해보십시오. https://www.dropbox.com/sh/ly18mj6tg4e22jc/AAB4pbGVrV73CSZ0HQ1RYoDza – FrancescoN

+0

글 레이드 파일이 좋습니다. 편집 된 소스 코드. 계속 노력해라. 좋은 물건들 – luciomrx

+0

고마워! "자체"매개 변수를 자르는 것을 잊어 버렸지 만, 내 소프트웨어 안에 필요합니다 (인스턴스 클래스 방법). "menuitem"의 경우 인쇄하려고하면 오른쪽 menuitem 객체의 이름이 Gtk.Buildable.get_name()을 통해 인쇄됩니다. 이제 "활성화"신호가 메뉴 항목 어린이에게만 적용된다는 것을 알고 있습니다. 그래서 나는 버튼이나 다른 어떤 것으로 menle menuitem을 대체해야한다고 생각합니다. – FrancescoN

관련 문제