5

libglade を使用する小さなプロジェクトがあり、次を使用して xml ファイルをロードします。

self.gladefile = "sdm.glade"
self.wTree = gtk.glade.XML(self.gladefile) 
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
    self.window.connect("destroy", gtk.main_quit)
dic = { "on_button1_clicked" : self.button1_clicked, 
        "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.signal_autoconnect(dic)

プロジェクトをグレードに変換した後、どのような構造上の変更を行う必要がありますか? 私はUbuntu 9.04を使用しています。

4

2 に答える 2

11

gtk.Builder代わりに使用する必要があります。このクラスは任意の数の UI ファイルをロードできるため、ファイルまたは文字列として手動で追加する必要があります。

self.uifile = "sdm.ui"
self.wTree = gtk.Builder()
self.wTree.add_from_file(self.uifile)

の代わりに、ビルダー クラスget_widgetで使用します。get_object

self.window = self.wTree.get_object("MainWindow")
if self.window:
    self.window.connect("destroy", gtk.main_quit)

信号を接続するには、 を使用するだけconnect_signalsで、辞書も使用できます。

dic = { "on_button1_clicked" : self.button1_clicked, 
    "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.connect_signals(dic)

以前は (少なくとも GTK+ 2.12 では、まだ同じかどうかはわかりません)connect_signals一度しか呼び出すことができず、最初の呼び出し時に接続されていないシグナルは決して接続されませんでした。これは空き地が違うので、以前にその機能に頼っていた場合は注意してください。

于 2009-04-14T21:57:11.477 に答える
5

Torsten の答えは正しいですが、少し不完全なので、 http: //xkcd.com/979/の精神に則って、多くの試行錯誤の末に最近落ち着いた手順を次に示します。

Glade インターフェイス デザイナーで yada.glade を開きます。edit->project に移動し、プロジェクト タイプを GtkBuilder に変更し、最新バージョン (この記事の執筆時点では 2.24) をターゲットにしていることを確認します。ファイルが GtkBuilder 形式で保存されていることを確認してファイルを保存し、名前を yada.glade から yada.ui に変更します。

yada.py を開き、次のコードを変更します。

gladefile = relativize_filename(os.path.join("glade", "yada.glade"))
self.wTree = gtk.glade.XML(gladefile, self.windowname)

に:

uifile = relativize_filename(os.path.join("glade", "yada.ui"))
self.wTree = gtk.Builder()
self.wTree.add_from_file(uifile)

同様に のすべてのインスタンスをself.wTree.get_widget(...)toに変更しますself.wTree.get_object(...)

self.wTree.signal_autoconnect(dic)に変更self.wTree.connect_signals(dic)

コードがインターフェイス デザイナーでウィジェットに割り当てられた名前に依存している場合は、 に変更widget.get_name()gtk.Buildable.get_name(widget)ます。 widget.get_name()ウィジェットタイプを返すだけになりました。widget.set_name('my_widget')編集: に変更する必要もありますgtk.Buildable.set_name(widget, 'my_widget')

消去import gtk.glade

yada.ui xml ファイルで未使用のシグナルが多数定義されていることがわかりました。xml ファイルを開いて手動で削除し、警告が表示されないようにする必要がありました。

于 2011-11-29T22:01:27.803 に答える