3

私は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)

どうすればすべての信号をブロック/切断できますか?(そして再接続しますか?)

前もって感謝します!

4

3 に答える 3

2

gtk.builderは便利なconnect_signals()を提供します。シグナルが接続されると、プログラムでシグナルをブロックまたは切断するのはあなた次第です。

シグナルのブロックとハンドラーの切断の両方に関するPyGTKのドキュメントは次のとおりです。

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

于 2010-11-19T00:37:38.040 に答える
0

このような場合は、手動でシグナルを接続し gtk.Builder.connect_signalsます。このメソッドはハンドラーIDを返さないため、シグナルを操作することはできません。そのハンドラーがないと、シグナルを操作できません。

私の場合、大したことではない信号のほんの2、3でした。

于 2010-11-24T20:21:02.730 に答える
0

私が今していること:忘れてくださいgtk.builder.connect_signals

だからあなたのコードの後:

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

私はこれに似たものを持っているでしょう:

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)

これは、最初のクイックチェックの後で一種の作業のようです。

于 2015-08-20T14:16:34.230 に答える