Glade 팔레트에 pygtk 위젯을 추가하는 방법은 무엇입니까?


8

다음과 같이 gtk 위젯을 만들었다 고 가정 해보십시오.

class AwesomeTextView (gtk.TextView):

    def set_font(self, font_description):
        self.modify_font(pango.FontDescription(font_description))

Glade Interface Builder에서 팔레트에 새 위젯을 추가하려면 어떻게해야합니까?

여기에 이미지 설명을 입력하십시오

답변:


7

좋아, 이것은 단계적으로 될 것입니다 :

  • 우리의 위젯은으로 명명 될 것이고 AwesomeTextView, 그것의 모듈은로 불릴 것 awesome_text_view입니다. 이것들이 우리에게 필요한 유일한 이름입니다.

glade 위젯은 모듈과 카탈로그의 두 부분으로 구성됩니다.

  1. 우리는 카탈로그를 만들고, awesome_text_view.xml루트로 저장합니다./usr/share/glade3/catalogs/

    이것은 다음과 같습니다

    <glade-catalog name="awesome_text_view"
        library="gladepython"
        domain="glade-3"
        depends="gtk+">
    
     <init-function>glade_python_init</init-function>
    
     <glade-widget-classes>
       <glade-widget-class title="Awesome TextView"
        name="AwesomeTextView"
        generic-name="awesome_text_view"/>
     </glade-widget-classes>
    
     <glade-widget-group name="python" title="Python">
       <glade-widget-class-ref name="AwesomeTextView"/>
     </glade-widget-group>
    </glade-catalog>

    이 템플릿이 작동하는 대로 복사하고 수정해야 합니다 . :-)

  2. 우리는 모듈을 만들고, awesome_text_view.py루트로 다시 저장합니다./usr/lib/glade3/modules/

    그 모습은 다음과 같습니다.

    import gobject
    import gtk
    import pango
    
    
    class AwesomeTextView (gtk.TextView):
    
        __gtype_name__ = 'AwesomeTextView'
    
        def __init__(self):
            gtk.TextView.__init__(self)
    
        def set_font(self, font_description):
            self.modify_font(pango.FontDescription(font_description))

    이제 Glade에 표시되며 응용 프로그램에 추가 할 수 있습니다.

  3. 마지막으로, 당신은 단지

        export PYTHONPATH="$PYTHONPATH:/usr/lib/glade3/modules/"

그게 다야!

위젯 사용 방법을 보여주는 작은 테스트 앱이 있습니다.

import gtk
import awesome_text_view

class App (object):

    builder = gtk.Builder()

    def __init__(self):
        self.builder.add_from_file("test.glade")
        self.builder.connect_signals(self)
        self.builder.get_object("awesome_text_view1").set_font("mono")
        gtk.main()

    def on_window1_destroy(self, widget):
        gtk.main_quit()


App()

실제로 실제로 사용자 정의 위젯을 코드와 함께 쉽게 배포하고 기여자가 시스템에 수동으로 설치하지 않고도 Glade에 추가 할 수있는 방법이 없습니다. Glade는 시스템의 내장에 들어 가지 않고 사용자 정의 위젯을 추가 할 수없는 유감입니다. 어쨌든 좋은 대답입니다!
David Planella

이것은 12.04에서 작동하지 않습니다. Glade가 이것을 인쇄합니다 : (glade : 25053) : GladeUI- 경고 ** : 외부 라이브러리 'gladepython'을로드하지 못했습니다
user1477

1

위젯에 대한 카탈로그를 작성하고이 폴더를 참조하십시오. /usr/share/glade3/catalogs/그러면 gnome.xml, 예제를 살펴보십시오.

그놈 문서도 참조하십시오 :

http://developer.gnome.org/gladeui/stable/catalogintro.html


작동하지 않습니다 :-( 문서가 단순히 잘못된 것 같습니다. 제 질문을 업데이트하겠습니다. 또한, 당신은 무슨 뜻으로 gtk+.xml방금 gnome.xml
나갔

기존 XML 파일을 수정하지 않고 자신의 XML 파일을 만들어야합니다.
Martin Owens -doctormo-

나는 단지 gnome.xml이 없다는 것을 이해했으며 그것이 문제를 나타낼 수 있는지 궁금했습니다. 당신이 게시 한 링크의 지침은 여전히 :-) 그것을 작업, 어떤 경우에 잘못
스테파노 팔라
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.