私が書いたコードの一部とやり取りするための小さな 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 初心者として、何がわかりません。このサンプルコードは私のものに非常に近いようです。何か案が?