2016-07-20 1 views
1

그래서 기본 메뉴 구조가 있습니다/부착 한 개 이상의 메뉴 항목에 하위 메뉴를 복제

menu = gtk.menu() 
item1 = gtk.MenuItem('Item 1') 
item2 = gtk.MenuItem('Item 2') 
menu.append(item1) 
menu.append(item2)` 
menu.show_all() 

을 그리고 하위 메뉴가 :이 같은 하위 메뉴를 첨부 할 지금

submenu = gtk.menu() 
subitem1 = gtk.MenuItem('Option 1') 
subitem2 = gtk.MenuItem('Option 2') 
submenu.append(subitem1) 
submenu.append(subitem2) 
submenu.show_all() 

을 구조를 최상위 메뉴 항목 모두에 적용합니다. 내 첫번째 생각은 단순히 item1item2 모두 .set_submenu(submenu)를 추가하는 작업해야했지만, 그것은 나에게 오류 제공 :

Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkMenuItem 

을하고 하위 메뉴 만이 부착 된 마지막 항목에 표시됩니다.

사실 두 개 이상의 최상위 항목이 있으며 대부분의 하위 메뉴 구조를 동일하게 연결해야합니다. 따라서 각 항목에 대해 동일한 하위 메뉴 구조를 정의하는 것은 실제로 옵션이 아닙니다. 이 작업을 수행하는 올바른 방법은 무엇입니까?

+0

이것은 이상한 구조처럼 보입니다. 왜 여러 항목에 동일한 하위 메뉴를 정의합니까? 하나의 메뉴를 만들고 사용자가 어떤 요소를 마우스 오른쪽 버튼으로 클릭했는지 살펴 봄으로써 일치하는 항목을 결정하십시오. – joaquinlpereyra

+0

@joaquinlpereyra 어제, 마우스 오른쪽 버튼을 클릭하지 않고 (그냥 마우스를 가져 가면) 드리프트를 얻습니다. 나는 자바 스크립트에서 비슷한 일을했지만 파이썬에서 어떻게 해야할지 모르겠다. 어떤예요? – Razor

+0

흠, 유혹은 도전처럼 보입니다. 사용자가 어디로 유인하고 있는지 감지 할 수 있습니까? 이 메뉴 아래에있는 위젯은 무엇입니까? – joaquinlpereyra

답변

0

터미널에 경고가 표시되므로 여러 컨테이너에 동일한 위젯을 추가 할 수없는 것과 같이 GtkMenu의 동일한 인스턴스를 다른 메뉴에 연결할 수 없습니다.

여러 하위 메뉴에서 동일한 하위 메뉴를 사용해야하는 경우 메뉴 계층 구조가 지나치게 복잡해 보입니다. 의심 할 여지없이 위치 메모리를 사용하여 계층 적 메뉴 구조에서 작업을 찾는 사용자를 혼동 할 것입니다.

어떤 경우에도 여전히 메뉴를 반복하려는 경우 간단한 "메뉴 팩터 리"기능을 사용하고 메뉴의 일반적인 GtkBuilder XML 설명에서 여러 인스턴스를 생성 할 수 있습니다.

관련 문제