5

Glade を使用して、ダイアログ ボックス付きの Python GUI を作成しています。

Glade を使用していなければ、クラスを使用してダイアログ ウィンドウを作成し (dialog)、それを実行し (dialog.run)、実行することをすべて実行してから削除します (dialog.destroy)。ダイアログボックスが再び必要になったときに、インスタンスを再作成します。

Gladeはこれにモンキーレンチを入れます。Gtk.Builder を呼び出した後、次のようなオブジェクトを取得できます。

dialog = builder.get_object("dialog")
response = dialog.run()
#do stuff
dialog.destroy()

メモリから削除するため、実行、使用、破棄の方法を好みます。

ただし、Glade を使用すると、上記の操作を行った後、呼び出しが破棄されているため、2 回目に動作させることができず、Glade に再インスタンス化させる方法がわかりません。

私が書いた過去のプログラムでは、これを行いました:

dialog = builder.get_object('dialog')
response = dialog.run()
# use it
dialog.hide()

再び必要になったときは、次のようにします。

dialog.show()
response = dialog.run()
# do stuff
dialog.hide()

この制限を回避するためですが、私はこの方法に満足していません。これはちょっとしたハックのように感じます (Glade では、とにかく最初からすべてが作成されていると思います)。このすべての表示と非表示を行うのではなく、Glade ライブラリでダイアログ ボックスを再インスタンス化する方法はありますか?

ありがとう、

ナルニー

4

1 に答える 1

2

はい - ただし、新しいbuilderオブジェクトを作成し、Glade ファイルを再ロードする必要があります。1 つのbuilderオブジェクトが 1 つのダイアログを作成し、それを破棄すると消えてしまいます。

ダイアログの非表示と表示がハックだとは必ずしも思いません。メモリが深刻な問題である場合は、破棄して再作成することをお勧めしますが、それ以外の場合は大きな違いはないと思います.

于 2012-12-09T10:36:07.787 に答える