请原谅我,如果这看起来是一个愚蠢的问题,只是到目前为止,没有人可以在互联网上找到一个解决这个问题的人,我只是想从一个比我更有经验的人那里得到一些反馈(我现在只使用python、pyGTK和Glade两天)。在
我有一个UI窗口显示,它更新来自处理蓝牙连接的线程的消息。在
这很好,我有应用程序关闭和运行相当可靠,问题是,在蓝牙连接建立后,我希望保持蓝牙线程(即,保持连接),但完全改变了主窗口的用户界面。在
现在我从glade制作的pyGTK应用程序中得到的印象是,最简单的事情就是打开一个新窗口。这真的是最好的选择吗?我可以从根目录中剪掉widgets树,维护windowwidget,但是从一个单独的glade文件添加一组新的widget吗?在
如果打开一个新窗口是最好的选择,那么假设蓝牙线程在这个转换过程中可以保持活动状态,并更新任何回调,这是对的吗?在
任何帮助或建议都会很好。在
干杯, 马特
我想你已经知道了,但是GTK(PyGtk)是线程感知的,不是线程安全的,因此,从另一个线程修改UI,而这个线程不是GTK的主循环,可能会使你的程序崩溃。在
你可以多次使用.glade文件,如果你想要的话,你可以只使用一个小部件(及其子部件),而忽略其他一切,这就是为什么gtk.glade.XML接受根参数。这个根是widget树开始的地方。在
您可以安全地隐藏窗口并保持更新,避免使用“新窗口”解决方案。在
如果我很明白,连接是与窗口严格耦合的。这似乎是aggregation和{a2}的一个很好的例子。简单地将窗口与连接分离。没有代码或更多的信息是不可能更准确的。在此之后,您可以使用您建议的两种解决方案:创建一个新窗口,引用连接线程,或者“分离”整个widgets树并附加一个全新的窗口,简单使用gtk.Container.remove和{a4}(gtk.窗口源于gtk.集装箱). 在
如果这还不够,修改你的问题,并添加一些信息和代码。在
相关问题 更多 >
编程相关推荐