6

我想让自己编写一些严肃的基于 GUI 的应用程序,但是当我从 Java 中查看诸如 Swing/SWT 之类的东西时,我不禁讨厌通过创建“小部件”对象并填充它们并调用方法来编写 GUI 界面他们。

我认为 GUI 设计应该以某种标记格式在一个单独的基于文本的文件中完成,该文件被读取和呈现(例如 HTML),这样界面的设计就不会与其余代码紧密耦合。

我见过HTMLayout并且我喜欢这个想法,但到目前为止它似乎只在 C++ 中。

我正在寻找一个 python 库(甚至是 WIP 项目)来做基于标记的 gui。

更新

我不能接受 QT 的 xml 的原因与我讨厌编程方法的原因是一样的;您正在分别组装每个小部件,并在单独的行上指定它的每个属性。与以编程方式执行此操作相比,它没有提供任何优势。

4

7 回答 7

7

你可以试试 Mozilla 的 XUL。它通过 XPCOM 支持 Python。

看到这个项目:pyxpcomext

XUL 没有被编译,它是在运行时打包和加载的。Firefox 和许多其他优秀的应用程序都使用它,但其中大多数使用 Javascript 来编写脚本而不是 Python。不过,有一两个使用 Python。

于 2009-04-20T14:18:21.090 回答
2

您应该研究 Qt,您可以使用出色的 PyQt 接口从 Python 中使用它(为什么他们没有将其命名为 QtPy --- cutiepie,明白了吗?---我永远不会明白)。

使用 Qt,您可以选择以编程方式构建您的 GUI(您不希望这样做),或者使用 XML 标记。该 XML 文件既可以预先编译为代码,也可以使用短命令加载。后者是使用 PyQt 的正常工作方式。

Qt 是通用的、高质量的、跨平​​台的,您很可能已经在不知不觉中使用它。如果我没记错的话,官方的 Skype 客户端应用程序是用 Qt 编写的。

编辑:只需添加一些链接,以便 OP 获得一些感觉......

于 2008-12-12T22:15:19.170 回答
2

wxPython怎么样?我刚刚开始使用它,但是有一个工具——XRC 资源编辑器——它允许您组装您的 GUI,然后将其写入 XML 文件。据我了解,您的 Python 应用程序会加载 XML 文件,而不是将一大堆 GUI 布局代码与您的 Python 代码混合在一起。

于 2008-12-12T22:36:16.977 回答
2

如果您选择像 Tcl 或 Python 和 Tk 这样的语言来进行应用程序开发,那么编写自己的 DSL 来描述接口变得相当简单。例如,您可以编写一个 DSL 来创建这样的菜单:

menubar {
    File => {
        Open => cmd.open
        Save => cmd.save
        Exit => cmd.exit
    }
    Edit => {
        Cut => cmd.cut
        Copy => cmd.copy
        Paste => cmd.paste
    }
}

...和您的主要 GUI 形式如下:

form PropertiesForm {
          Font: [fontchooser]
    Foreground: [foregroundChooser]
    Background: [backgroundChooser]
}
form NewUserForm {
    username [_____________________]
    [] administrator
    enable the following features:
    () feature 1
    () feature 2
    () feature 3
}
notebook {
   Properties => PropertiesForm
   New User => NewUserForm
}

... 等等。Tcl 真的很擅长让你编写这样的 DSL。请注意,Tcl 本身并未内置此功能,但该语言使 DSL 变得微不足道。Tcler 的 wiki 上存在一些这类东西,例如,有一些代码可以创建类似于我在Menus Made Easy中描述的菜单。

不过,我认为,一段时间后你会发现以这种方式制作专业级 UI 真的非常困难。

于 2009-04-20T15:26:43.623 回答
1

如果您使用GTK,则可以使用Glade,它是一个 XML 文件。

于 2008-12-12T22:38:32.040 回答
-1

它是 XML,不是 Python,但看看Open Laszlo

于 2008-12-12T22:14:46.223 回答
-2

视窗?

您可以在 Visual Studio 中使用 WinForms 编辑器,然后从 IronPython 与程序集对话。

于 2008-12-12T22:23:33.087 回答