gtk.builder, 컨테이너 서브 클래스 및 바인딩 하위 위젯
-
03-07-2019 - |
문제
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도 이미 빌드 가능한 것을 구현한다는 것입니다. 상호 작용.
제휴하지 않습니다 StackOverflow