Gtk.main公司()Gtk3 in堵塞

2024-04-26 07:56:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在设计一个小的GUI来与我编写的代码进行交互。在

我的问题是Gtk.main()命令似乎被阻塞了,即使当我单击destroy按钮时窗口关闭了,我的终端仍然被挂起。在

我也看不到任何信号的相互作用。在

这是我的样品:

#!/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.线程这些都是我在互联网上查看不同源代码的测试。在

我想不出一个成功的组合。在

如果我在控制台中运行程序,我得到的结果是:

^{pr2}$

即使我按了停止按钮关上了窗户。在

关闭窗口后,控制台保持不变,即使按ctrl+c也不会停止应用程序。在

我肯定我错过了一些基本的东西,但作为一个完整的guinoob,我不知道是什么。This sample code看起来和我的很接近。有什么想法吗?在


Tags: fromselfgtkinitmainondefbuilder
1条回答
网友
1楼 · 发布于 2024-04-26 07:56:19

好吧,我在这里同时感到愤怒和愚蠢。在

我尝试重用我用Quickly进行的尝试中的代码

我在我的空地档案里没有明确的信号。 由于某些原因,我不太明白,可以快速调用事件,而不必在glade文件中定义它们。在

当然不行。在

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

编辑:

作为信息的补充,下面是glade文件中信号的样子

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

相关问题 更多 >