【问题标题】:PyGTK, Glade, Changing the window view and threadsPyGTK, Glade, 改变窗口视图和线程
【发布时间】:2010-05-07 13:52:17
【问题描述】:

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

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

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

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

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

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

干杯, 马特

【问题讨论】:

    标签: python multithreading pygtk glade


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多