Python 使用GTK时保持后台事件处于活动状态

Python 使用GTK时保持后台事件处于活动状态,python,linux,multithreading,gtk,pox,Python,Linux,Multithreading,Gtk,Pox,我正在尝试为Linux创建一个简单的Python应用程序,并使用GTK为其生成一个UI。我刚刚开始探索GTK,但从我所能告诉你的,当你调用GTK.main()时,程序会在任何地方进入该函数,并且只响应用户与UI的交互。问题是,我正在运行一个SDN控制器(POX),我希望与POX对象实例相关联的事件也能够运行(由于程序永远卡在“GTK.main()”中,所以目前不会发生这种情况) 我已经考虑过创建一个新线程并从那里调用GTK.main(),但接下来我将不得不担心线程安全性。UI的事件以及程序其余部

我正在尝试为Linux创建一个简单的Python应用程序,并使用GTK为其生成一个UI。我刚刚开始探索GTK,但从我所能告诉你的,当你调用
GTK.main()
时,程序会在任何地方进入该函数,并且只响应用户与UI的交互。问题是,我正在运行一个SDN控制器(POX),我希望与POX对象实例相关联的事件也能够运行(由于程序永远卡在“GTK.main()”中,所以目前不会发生这种情况)


我已经考虑过创建一个新线程并从那里调用GTK.main(),但接下来我将不得不担心线程安全性。UI的事件以及程序其余部分实例化的对象的事件是否会以某种方式同时触发?

我能够通过为GTK和POX控制器生成单独的线程来解决这个问题。完成此操作后,一切都可以同时正常工作。

我认为您希望将GTK进程保留在主线程中。通常,在进入运行循环以处理用户操作时,这是所需的行为。听起来,另一个控制器应该通知在main()运行循环中观察到的对象任何可操作的更改。因此,我为该控制器生成了另一个线程,并通过主线程调用了
GTK.main()
,但它似乎仍然很混乱。不知何故,对GTK.main()的调用也会阻塞另一个线程,因为只要我关闭UI窗口,另一个线程就会继续运行。这对我来说都是新鲜事。我习惯于.NET编程,在那里生成一个新线程非常容易:/Wait,你是从两个线程调用
GTK.main()
吗?@Ali250如果你在两个线程上调用
GTK.main()
,那就是你的问题。只能从一个线程调用
GTK.main()
。当您创建一个新线程时,您可以继续并开始处理它。如果您需要更新UI,您可以使用空闲回调进行更新;不确定它们在Python中是如何工作的。我没有从两个线程调用GTK.main(),只是从一个线程调用。无论如何,我通过生成两个线程来解决它,一个用于GTK,另一个用于我的POX控制器。