GtkBuilderにlibgladeを使用してから変換するための手順を教えてください。 (パイソン)

StackOverflow https://stackoverflow.com/questions/748872

質問

私は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にしています。

役に立ちましたか?

解決

あなたは代わりに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)

それはあなたが最初の呼び出しの間に接続されていない任意の信号が接続されることはありません、一度だけconnect_signalsを呼び出すことができること(少なくともGTK + 2.12で、それはまだ同じだかどうかわからない)場合に使用されます。これは、あなたが前にその機能に依存していた場合ので注意してください、空き地で異なっていた。

他のヒント

トルステンの答えは正しいですが、少し不完全なので、 http://xkcd.com/979/の精神でをここで私は最近、多くの試行錯誤の後に定住手順は次のとおりです。

グレイドインターフェイスデザイナーで開くyada.glade。編集 - >プロジェクトに移動しGtkBuilderにプロジェクトの種類を変更し、それが最新バージョン(これを書いている時点では2.24)を標的にしてください。 、ファイルを保存し、それがGtkBuilder形式で保存していることを確認している、とyada.uiするyada.gladeから名前を変更する

開く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(...)する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()は今だけのウィジェットタイプを返します。 EDIT:あなたもwidget.set_name('my_widget')gtk.Buildable.set_name(widget, 'my_widget')を変更する必要があります。

削除import gtk.glade

私はyada.ui xmlファイルで定義された多数の未使用の信号を見つけ、私は彼らが引き起こした警告を排除するためにXMLファイルを開いて、手動で削除する必要がありました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top