基于标记的python GUI

时间:2008-12-12 22:10:09

标签: python user-interface markup

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

我认为GUI设计应该在一个单独的基于文本的文件中以某种标记格式完成,这种格式是读取和呈现的(例如HTML),因此接口的设计与其余代码没有紧密耦合。

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

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

更新

我不能接受QT的xml的原因与我讨厌编程方法的原因相同;您将单独组装每个窗口小部件,并在单独的行上指定它的每个属性。与以编程方式进行相比,它没有任何优势。

8 个答案:

答案 0 :(得分:7)

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

查看此项目:pyxpcomext

XUL未编译,它在运行时打包并加载。 Firefox和许多其他优秀的应用程序都使用它,但大多数都使用Javascript代替Python而不是脚本。但是有一个或两个使用Python。

答案 1 :(得分:3)

你应该研究Qt,你可以使用优秀的PyQt接口从Python中使用它(为什么他们没有将它命名为QtPy --- cutiepie,得到它?---我永远不会理解)。

使用Qt,您可以选择以编程方式(您不需要)构建GUI,或使用XML标记。此XML文件可以预先编译为代码,也可以使用short命令加载。后者是使用PyQt工作的常用方法。

Qt是多功能,高质量,跨平台的,你很可能在不知情的情况下使用它。如果我没记错的话,官方的Skype客户端应用程序是用Qt编写的。

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

答案 2 :(得分: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维基上存在一些类型的东西,例如,有一些代码可以创建类似于我在Menus Made Easy中描述的菜单。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

作为一名已经获得一些经验的GUI程序员,您可能应该只使用自己的可爱小工具包来自动执行您自己一遍又一遍地执行的任务。

答案 6 :(得分:-1)

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

答案 7 :(得分:-2)

窗户?

您可以在Visual Studio中使用WinForms编辑器,然后与IronPython中的程序集通信。