2010-11-18 5 views
2

私はこれでgtk.builderですべての信号を接続しますgtk.builderの切断信号はどうですか?

ui_builder = gtk.Builder() 
ui_builder.add_from_file('main.ui') 
self.win_main = builder.get_object('win_main') 
ui_builder.connect_signals(self) 

がどのように私は、任意の/すべての信号を抜いてくださいブロック/だろうか? (そして再接続しますか?)

ありがとうございます!

+0

私はインタフェースを記述し、シグナル名を宣言するために 'glade'を使いたいと仮定して、プログラム的に接続できるものをプログラム的に切り離すにはどうしたらよいでしょうか? – mariotomo

答えて

2

gtk.builderは便利な方法としてconnect_signals()を提供しています。信号が接続されると、信号をプログラム的にブロックまたは切断するのはあなた次第です。ここで

はブロッキング信号と切り離すハンドラの両方のためのPyGTKのドキュメンテーションです:

http://www.pygtk.org/pygtktutorial/ch-advancedeventsandsignals.html

+0

しかし、この答えは、 "あなたがhandler_idを持っていれば、信号を切断することができます"と伝えます。 gtk.builder.connect_signalsは、それが何をするかのhandler_idを提供しません。 – mariotomo

0

このメソッドは戻りませんので、私はこのような場合に何、ないgtk.Builder.connect_signalsと、手動で信号を接続することですそれらのハンドラのIDは であり、そのハンドラがなければシグナルを操作することはできません。

私の場合は、信号のいくつかは大したことではありませんでした。

0

私が今やっていること:gtk.builder.connect_signalsを忘れてしまった。

ので、あなたのコードの後:

list_of_handler_ids = [] 
import libxml2 
doc = libxml2.parseFile('main.ui') 
ctxt = doc.xpathNewContext() 
signals = ctxt.xpathEval('//signal') 
for s in signals: 
    handler = getattr(self, s.prop('handler')) 
    signaller = getattr(self.win_main, s.parent.prop('id')) 
    handler_id = signaller.connect(s.prop('name'), handler) 
    list_of_handler_ids.append(handler_id) 

最初の簡単なチェックの後、作業一種のようだ:

ui_builder = gtk.Builder() 
ui_builder.add_from_file('main.ui') 
self.win_main = builder.get_object('win_main') 

私はこれに似た何かを持っているでしょう。

+0

以上、lxmlを使用すると、コードは基本的に同じですが、lxmlはpypiからインストールできます – mariotomo

関連する問題