Gtk.main()在Gtk3接口中阻塞

时间:2012-07-18 06:49:59

标签: python linux gtk pygtk

我正在设计一个小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菜鸟,我看不出是什么。 This sample code似乎非常接近我的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,我在这里同时感到生气和傻瓜。

我尝试重复使用Quickly

尝试的代码

我的glade文件中没有定义信号。 出于某种原因,我并没有完全得到,Quickly让你调用事件而不在glade文件中定义它们。

确定无法正常工作。

上面的Python代码可以正常工作,前提是您在glade文件中定义了正确的信号

编辑:

作为信息的补充,这里是一个信号在林间空地文件中的样子

<signal name="delete-event" handler="on_destroy" swapped="no"/>