2

これがばかげた質問のように思われる場合はご容赦ください。これまでのところ、インターネット上でこれに対する解決策を提供している人を見つけることができず、自分よりも経験豊富な人からフィードバックを受け取りたいと思っていました(私はPythonのみを使用しています) 、pyGTKとGladeを2日間使用します)。

UIウィンドウが表示され、Bluetooth接続を処理しているスレッドからのメッセージで更新されます。

これは問題なく、アプリケーションを閉じて非常に確実に実行しています。問題は、Bluetooth接続が確立された後、Bluetoothスレッドを維持したい(つまり、接続を継続したい)が、メインウィンドウのUIを完全に変更したいということです。

今、私が空き地から作られたpyGTKアプリケーションから得ている印象は、最も簡単なことは新しいウィンドウを開くことであるということです。これは本当に最良のオプションですか?ウィンドウウィジェットを維持しながら、ウィジェットのツリーをルートで切り取り、別の空き地ファイルから新しいウィジェットのセットを追加することはできますか?

新しいウィンドウを開くことが最善のオプションである場合、コールバックを更新すれば、この移行中にBluetoothスレッドを存続させることができると思いますか?

ヘルプやポインタは素晴らしいでしょう。

乾杯、マット

4

2 に答える 2

2

私がよく理解している場合、接続はウィンドウと厳密に結合されています。これは、集計構成の良い例のようです。ウィンドウを接続から単純に分離します。コードまたはより多くの情報がなければ、より正確にすることは不可能です。この後、提案したソリューションの両方を使用できます。接続スレッドの参照を使用して新しいウィンドウを作成するか、ウィジェットツリー全体を「デタッチ」して新しいものをアタッチします。単純にgtk.Container.removegtk.Container.addを使用します(gtk.Window は gtk.Container から派生)。

これで十分でない場合は、質問を修正し、情報とコードを追加してください。

于 2010-03-31T16:14:23.253 に答える
0

すでにご存知だと思いますが、GTK (PyGtk) はスレッド対応であり、スレッド セーフではないため、gtk のメイン ループを保持するスレッド以外の別のスレッドから UI を変更すると、おそらくプログラムがクラッシュします。

.glade ファイルを数回使用できます。必要に応じて 1 つのウィジェット (およびその子) のみを使用し、他のすべてを無視することができます。これが gtk.glade.XML がルート パラメーターを受け入れる理由です。このルートは、ウィジェット ツリーが開始される場所です。

gladeobject = gtk.glade.XML(path_to_glade_file, root='widgetname')

ウィンドウを安全に非表示にして最新の状態に保ち、「新しいウィンドウ」ソリューションを回避できます。

于 2010-05-07T05:52:17.890 に答える