문제

GTK.Builder 정의 파일에서 사용자 정의 컨테이너 위젯을 사용하려고합니다. 그 위젯을 인스턴스화하는 한, 그것은 훌륭하게 작동합니다.

#!/usr/bin/env python

import sys 
import gtk 

class MyDialog(gtk.Dialog):
    __gtype_name__ = "MyDialog"


if __name__ == "__main__":
    builder = gtk.Builder()
    builder.add_from_file("mydialog.glade")

    dialog = builder.get_object("mydialog-instance")
    dialog.run()

이제 문제는 해당 대화 상자에 GTK.TreeView 위젯이 있다고 말하는 것입니다. 해당 위젯을 MyDialog 인스턴스 변수에 바인딩하는 방법을 알아 내려고합니다.

내가 생각할 수있는 저렴한 대안 중 하나는 다음과 같은 대화 상자를 얻은 후 추가 방법을 호출하는 것입니다.

dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)

그러나 그것은 상당히 어색해 보입니다. 누구든지 이미 이것을 해결 한 사람이 있거나 어떻게 해야하는지에 대한 더 나은 아이디어를 가지고 있습니까?

감사,

도움이 되었습니까?

해결책

좋아, 나는 내 자신의 질문에 대답했다고 생각한다.

위의 일을 수행하는 한 가지 방법은 GTK.Buildable의 parser_finished ()를 무시하는 것입니다. 이 방법은 전체 .xml 파일이로드 된 후 호출되므로 우리가 보유하고 싶은 추가 위젯이 이미 존재하고 집중되어 있습니다.

class MyDialog(gtk.Dialog, gtk.Buildable):
    __gtype_name__ = "MyDialog"

    def do_parser_finished(self, builder):
        self.treeview = builder.get_object("treeview1")
        # Do any other associated post-initialization

한 가지 주목해야 할 것은 어떤 이유로 (적어도 나에게, 피그크 2.12에서) GTK에서 명시 적으로 상속되지 않으면 재정의 메소드가 호출되지 않고 GTK.Dialog도 이미 빌드 가능한 것을 구현한다는 것입니다. 상호 작용.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top