0

私が書いたコードの一部とやり取りするための小さな GUI を設計しています。

私の問題は、Gtk.main()コマンドがブロックされているように見えることです。破棄ボタンをクリックするとウィンドウが閉じても、端末がまだハングしています。

また、信号との相互作用も見られません。

これが私のサンプルです:

#!/usr/bin/env python

from gi.repository import Gtk, Gdk, GObject

GObject.threads_init()

class Ivolution():       

    def __init__(self):

        print "in"
        self.builder = Gtk.Builder()
        self.builder.add_from_file("data/ui/IvolutionWindow.glade")
        #builder.connect_signals({ "on_window_destroy" : gtk.main_quit })
        self.window = self.builder.get_object("ivolution_window")
        print "in fin"

    def on_stopbutton_clicked(self, widget):
        """
        Asks the Facemovie thread to terminate
        """
        print "Stop"    

    def on_ivolutionwindow_destroy(self, widget, data=None):
        """Called when the IvolutionWindow is closed."""

        # Clean up code for saving application state should be added here.
        print "Exiting"
        Gtk.main_quit()
        print "Exited"

if __name__ == "__main__":
    app = Ivolution()
    print "deb"
    app.window.show()
    Gdk.threads_init()
    Gdk.threads_enter()
    print "but"
    Gtk.main()
    print "end"
    Gdk.thread_leave()
    print "ding"

重要でない部分をすべて取り除きました。

Gobject と gdk.threads は、インターネット上でさまざまなソース コードを調べて作成したテストです。

私はそれらの成功した組み合わせを思いつくことができませんでした。

プログラムをコンソールで実行すると、次のようになります。

in

(Ivolution.py:4635): Gtk-CRITICAL **: gtk_radio_button_set_group: assertion `!g_slist_find (group, radio_button)' failed

(Ivolution.py:4635): Gtk-CRITICAL **: gtk_radio_button_set_group: assertion `!g_slist_find (group, radio_button)' failed
in fin
deb
but

停止ボタンを押してウィンドウを閉じても。

ウィンドウを閉じると、コンソールは同じままで、ctrl+c を押してもアプリケーションは停止しません。

私は何か基本的なことを見逃していると確信していますが、完全な GUI 初心者として、何がわかりません。このサンプルコードは私のものに非常に近いようです。何か案が?

4

1 に答える 1

1

わかりました、私はここで同時に怒りと愚か者の両方を感じます。

Quicklyで行った試みのコードを再利用しようとしています

空き地ファイルに信号が定義されていませんでした。なんらかの理由で正確にはわかりませんが、Gradeファイルでイベントを定義せずにQuicklyでイベントを呼び出すことができます。

それが機能しなかったことを確認してください。

グレイドファイルで正しいシグナルが定義されていれば、上記のPythonコードは正常に機能します

編集 :

情報の補足として、ここに信号が空き地ファイルでどのように見えるかを示します

<signal name="delete-event" handler="on_destroy" swapped="no"/>
于 2012-07-18T11:42:24.980 に答える