编写Python GTK +应用程序的“良好实践”方式是什么?

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

目前我有一个parser.py,它处理所有低级文件IO并解析文件。 我在树形视图中显示文件的内容,这意味着我需要使用树存储作为我的数据类型。

我遇到的问题是我只想到两个解决这个问题的方法。 首先,我的解析器可以创建一个树库并将其传递给我的UI类。 这需要我的分析器依赖于pygtk,并尽量减少对类的潜在重用。 第二个将在解析器中存储对我的ui类的引用,这也可能会限制我的解析器类作为独立库的重用。

为了将我的问题简化为简短的一行:有没有办法以更为pythonic或OO友好的方式实现我的目标?

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

其他pythonic建议表示欢迎,这是我的第一个python程序,我可能会陷入更多的C ++风格的思考。 我打算重构很多它。


你应该看看教程“在Python中对GObject进行分类”。 这通过使用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)

...然后在你的主要脚本中:

parser = parser.Parser(...)
ui = view.ParseView(...)
app = MyApp(parser, ui)

app.show_all()

gtk.main()

当然,这通常是不同的取决于例如。 我使用格莱德? 我是否将主应用程序的小部件分类或包装它们? 等等

关于这一点的好处是,你可以编写一个测试分析器,它不做任何事情,只是返回预编程的响应,或者使用已知的测试文件。 交换它就像上面改变一行一样简单:

parser = parser.DummyParser(...)
链接地址: http://www.djcxy.com/p/47865.html

上一篇: What is a 'good practice' way to write a Python GTK+ application?

下一篇: Ant replace token from properties file