【问题标题】:How to create a custom GUI for a python program?如何为 python 程序创建自定义 GUI?
【发布时间】:2013-07-25 14:04:40
【问题描述】:

我想为具有自定义设计的 python 程序创建一个 GUI,我在 Photoshop 中有一个模型,我正在寻找一个支持主题的库或任何其他可以完成这项工作的库。

我的 GUI 设计包含渐变、边框、边框半径和带有自定义最小化和关闭按钮的自定义标题栏,例如查看 Github client for Windows 或任何 Adob​​e 软件安装程序。

我尝试了 wxPython,我使用style=wx.NO_BORDER 删除了 Windows 添加的标题栏和默认边框,但我觉得我没有使用正确的工具来完成这项工作,我在某处读到 wxPython 主要用于原生看 GUI 的,不适合这种自定义,所以我应该寻找其他东西。

我在这里找到了一个答案,建议使用 PyQT 和 QML 在 GUI 中进行高度自定义,但是编译后的文件非常大。

那么我应该使用什么来创建自定义 GUI?我也在寻找编译程序,所以我需要使用合理的文件大小。

【问题讨论】:

  • 使用 GTK 和空地。 Glade 帮助您设计您的 UI,而您用 GTK API 编写的脚本将成为逻辑
  • 如果您不介意为实际的 GUI 创建选择一些额外的语言,pyamf.org/index.html 也是一个可能的选择。

标签: python user-interface wxpython pyqt


【解决方案1】:

您使用 wxPython 的初始方法很好,您只需要为您的顶级 wx.Frame 多添加几个样式标志:

wx.NO_BORDER ^ wx.SYSTEM_MENU ^ wx.MINIMIZE_BOX ^ wx.MAXIMIZE_BOX ^ wx.CLOSE_BOX

这不仅会删除边框,还会删除系统菜单和最小/最大/关闭框。

然后直接在顶部框架的客户区域绘制 gui 背景。 请参阅此tutorial: 并注意wx.DeviceContext 支持绘制位图和渐变填充。

现在制作您的自定义按钮,并让它们在单击时发布wx.CloseEventwx.IconizeEventwx.MaximizeEvent 事件。使用绝对定位或Sizer 将它们放置在您的自定义框架上。完成。

【讨论】:

    【解决方案2】:

    使用 wxPython/wxWidgets 自定义 GUI

    你是对的,通常 wxWidgets 旨在通过通常和默认情况下使用标准控件提供原生外观和感觉,但是存在不这样做的选项。安装 wxPython,在最近的版本中,然后安装相同版本的 Docs & Demos 包,然后运行演示并导航到 Advanced Generic Widgets 选项卡,您将找到您要求在 AUI 演示中演示的所有功能。它确实提到了自定义关闭,最小化等,你唯一提到的不是那个演示是渐变按钮。您还将找到渐变和水色按钮的演示,以及缩放栏 - 一个 Mac 但独立于平台。 附上 AUI 演示和缩放栏上的演示包截图:

    wxPython AGW AUI 截图:

    缩放栏演示:

    文件大小注意事项:

    我已经使用 wxPython 好几年了,我目前的主要项目在 15-20 个可执行文件中提供了大量的功能,但是 py2exe 给了我一组压缩到 35 兆字节以下的可分发文件,包括文档和可再分发库 - 我有一个非常有经验的人来找我并要求知道我的交付包的其余部分隐藏在哪里 - 它是在线的还是我以其他方式预安装的- 他震惊地得知它全部都在一个 zip 文件中

    【讨论】:

      【解决方案3】:

      Qt 支持两种主要的方式来自定义外观(和感觉):

      • 样式:例如 Oxygen 或 Windows 样式或 Mac 样式等原生样式。样式开发起来相当复杂,因为它们需要直接与底层操作系统交互。你可能不想要这个。另外,我不认为样式可以用 Python 编写,但我可能在这里错了。

      • 样式表:这些是应用于您的 GUI 的普通 CSS 样式表。这些非常灵活,可以在运行时更改,不需要任何其他代码,可以使用图像等资源,并且可以影响或更改大部分渲染。
        This stylesheet 例如只是触及了可能的表面。 ..

      请注意,许多用户发现自定义 GUI 样式具有破坏性和/或错误,因为他们通常希望应用程序看起来像原生的,即像所有其他应用程序一样。不过,自定义 GUI 有充分的理由,例如,对于图像软件,人们通常希望使用对比度较低的 GUI(如 Adob​​e、Blender 等),以免干扰查看/编辑的图像。

      使用 Qt 或 GTK+ 等广泛使用的工具包并对其外观进行自定义的巨大优势在于可用性是最受青睐的,而为游戏或类似工具开发的工具包通常会暴露出较差的可用性。

      【讨论】:

      • 对于自定义 GUI 注释来说太正确了。像 Qt 和 GTK 这样的框架和 wxWidgets 的原因是开发人员可以编写一次代码并拥有一个原生的跨平台应用程序。
      【解决方案4】:

      如果您想要 GitHub GUI 之类的东西,请尝试 PyGame。 window.NOFRAME 属性可用于移除边框。

      【讨论】:

        【解决方案5】:

        我会推荐 pyqt4 或 pyside。 它具有最强大的 python gui 开发。 它已经带有一些样式,例如:

        • 窗户
        • WindowsXP
        • WindowsVista
        • 主题
        • CDE
        • 塑料
        • 清晰的外观

        您还可以创建自己的样式。这个link 是一个很好的起点:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-08
          • 2012-12-29
          • 2012-12-27
          • 2019-11-27
          • 2021-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多