【问题标题】:Markup-based GUI for pythonpython的基于标记的GUI
【发布时间】:2010-09-26 17:34:36
【问题描述】:

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

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

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

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

更新

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

【问题讨论】:

    标签: python user-interface markup


    【解决方案1】:

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

    查看此项目:pyxpcomext

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

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

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

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

      编辑:只需添加一些链接,以便 OP 对它有所了解...

      【讨论】:

      • 我之前接触过 Qt,虽然没有深入了解,但如果您添加指向与 xml-markup-thing 相关的内容的链接会有所帮助:)
      • 我在工作中使用 QT/PyQT 并且喜欢使用它们。请记住,在您学习期间,它们都是免费的,就像 GPL 开源许可一样,但是一旦您开始销售您的作品,您需要为每位开发者购买一份商业开发者许可。
      • XML 标记是所使用的 .ui 文件的格式。这些可能是手工编写的,或者您可以使用 Qt 设计器来创建它们。
      • hasen:三个链接中的第一个包含一个示例 .ui 文件:sector.ynet.sk/qt4-tutorial/tutorial/…
      • 顺便说一下,请注意第三个链接在 PyQt 版本 3 上,所以它可能不再 100% 适用了。
      【解决方案4】:

      如果您选择像 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 真的非常非常困难。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 显然年龄不大
          【解决方案7】:

          窗户?

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

          【讨论】:

          • 因为它适用于 Windows 而被否决?我不明白。 +1 抵消。
          • 投反对票,因为“与程序集交谈”不等于“基于标记的 UI”,此外,即使成功地辩称它是基于 /is/ 标记的,尽管它具有特定于 Windows IDE 的花哨“汇编库”,它遇到了与 QT 的 OP 相同的问题。
          • winforms 编辑器生成代码。在某些情况下特别丑陋的代码。此外,IronPython 是在 .NET 运行时之上的 Python 语言实现。这意味着你会丢失很多 CPython 模块。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 2020-08-08
          • 2019-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多