编写pythongtk+应用程序的“良好实践”方法是什么?

2024-06-03 00:47:11 发布

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

我目前正在编写一个PyGTK应用程序,我想要一些关于构建我的应用程序的最佳方式的建议。基本上,应用程序将读取特定的文件规范,并将其显示在GUI中进行编辑。在

目前我有一个分析器.py它处理所有低级文件IO和文件解析。我在treeview中显示文件的内容,这意味着我需要使用treestore作为我的数据类型。在

我遇到的问题是我对这个问题只想出了两种解决办法。首先,我的解析器可以构建一个treestore并将其传递给我的ui类。这需要依赖于pygtk的解析器,并将类的潜在重用最小化。第二种方法是在解析器中存储对ui类的引用,这也可能会限制解析器类作为独立库的重用。在

把我的问题浓缩成一句简短的话:有没有一种方法可以用一种更为Python式或OO友好的方式来实现我的目标?在

如果查看我的代码可以帮助任何人回答我的问题:https://code.launchpad.net/~blainepace/nbtparser/trunk

Py>其他python建议欢迎,这是我的第一个Python程序,我可能会陷入更多的C++思维方式。我计划重构很多。在


Tags: 文件方法pyio规范应用程序解析器分析器
1条回答
网友
1楼 · 发布于 2024-06-03 00:47:11

你应该看看教程"Sub-classing GObject in Python"。这需要使用GObject的类型系统来创建信号和属性,这允许您以一种易于与典型PyGTK语义(连接到信号、等待属性通知等)集成的方式对底层行为进行建模。在

解析器和UI都应该只有属性和信号可以连接。然后有第三个类连接这些信号和回调,并在if __name__ == __main__块中启动主循环。在

通常,我的看起来像:

class MyApp(gtk.Window):

    def __init__(self, parser, ui):
        gtk.Window.__init__(self)
        parser.connect("some-signal", ui.update_this)
        parser.connect("some-other-signal", ui.update_that, extra_params)
        ui.connect("refresh-clicked", parser.reparse_file)
        self.add(ui)

…然后在主脚本中:

^{pr2}$

当然,这通常是不同的,取决于我是否在使用空地?我是为主应用程序的小部件分类还是包装它们?等等

这样做的好处在于,你可以编写一个测试解析器,它只返回预先编程的响应,或者使用已知的测试文件。将其换入就像更改上面的一行一样简单:

parser = parser.DummyParser(...)

相关问题 更多 >