PyGTK,Glade,更改窗口视图和线程

2024-09-29 17:15:47 发布

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

请原谅我,如果这看起来是一个愚蠢的问题,只是到目前为止,没有人可以在互联网上找到一个解决这个问题的人,我只是想从一个比我更有经验的人那里得到一些反馈(我现在只使用python、pyGTK和Glade两天)。在

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

这很好,我有应用程序关闭和运行相当可靠,问题是,在蓝牙连接建立后,我希望保持蓝牙线程(即,保持连接),但完全改变了主窗口的用户界面。在

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

如果打开一个新窗口是最好的选择,那么假设蓝牙线程在这个转换过程中可以保持活动状态,并更新任何回调,这是对的吗?在

任何帮助或建议都会很好。在

干杯, 马特


Tags: 应用程序消息ui互联网经验widgets用户界面事情
2条回答

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

你可以多次使用.glade文件,如果你想要的话,你可以只使用一个小部件(及其子部件),而忽略其他一切,这就是为什么gtk.glade.XML接受根参数。这个根是widget树开始的地方。在

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

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

如果我很明白,连接是与窗口严格耦合的。这似乎是aggregation和{a2}的一个很好的例子。简单地将窗口与连接分离。没有代码或更多的信息是不可能更准确的。在此之后,您可以使用您建议的两种解决方案:创建一个新窗口,引用连接线程,或者“分离”整个widgets树并附加一个全新的窗口,简单使用gtk.Container.remove和{a4}(gtk.窗口源于gtk.集装箱). 在

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

相关问题 更多 >

    热门问题