2

如果这似乎是一个愚蠢的问题,请原谅我,到目前为止,我在互联网上找不到提供解决方案的人,我只是想从比我更有经验的人那里获得一些反馈(我只使用过 python , pyGTK 和 Glade 2 天了)。

我有一个 UI 窗口显示,它使用来自处理蓝牙连接的线程的消息进行更新。

这很好,我的应用程序关闭并运行得很可靠,问题是,在建立蓝牙连接后,我希望保持蓝牙线程(即保持连接继续)但完全改变主窗口的 UI。

现在我从 glade 制作的 pyGTK 应用程序中得到的印象是,最简单的事情就是打开一个新窗口。这真的是最好的选择吗?我可以从根部切断小部件树,维护窗口小部件,但从单独的 gade 文件中添加一组新的小部件吗?

如果打开一个新窗口是最好的选择,我是否正确地假设蓝牙线程可以在此转换期间保持活动状态,只要我更新任何回调?

任何帮助或指示都会很棒。

干杯,马特

4

2 回答 2

2

如果我很好地理解连接与窗口严格耦合。这似乎是聚合组合的一个很好的例子。简单地将窗口与​​连接分离。没有代码或更多信息是不可能更准确的。在此之后,您可以使用您提出的解决方案:使用连接线程的引用创建一个新窗口或“分离”整个小部件树并附加一个全新的窗口,简单地使用gtk.Container.removegtk.Container.add(gtk.Window 派生自 gtk.Container)。

如果这还不够,请修改您的问题并添加一些信息和代码。

于 2010-03-31T16:14:23.253 回答
0

我想你已经知道了,但是 GTK (PyGtk) 是线程感知的,而不是线程安全的,所以,从另一个线程修改 UI 而不是持有 gtk 的主循环的线程可能会使你的程序崩溃。

您可以多次使用 .glade 文件,如果需要,可以只使用一个小部件(及其子小部件)而忽略其他所有内容,这就是 gtk.glade.XML 接受根参数的原因。这个根是您的小部件树将开始的地方。

gladeobject = gtk.glade.XML(path_to_glade_file, root='widgetname')

您可以安全地隐藏窗口并保持更新,避免“新窗口”解决方案。

于 2010-05-07T05:52:17.890 回答