【问题标题】:How to fix theme for PyQt5 applications?如何修复 PyQt5 应用程序的主题?
【发布时间】:2017-05-08 16:24:26
【问题描述】:

我尝试在同一系统上使用 pip 中的 PyQt5 和 apt (python3-pyqt5)。这两个版本都有不同的主题(图片如下)。

我尝试将环境变量QT_STYLE_OVERRIDE 设置为“gtk”以及“gtk+”,但无法获得原生外观。

我很好奇为什么会这样。如何强制它使用 QGtkStyle?其他本机应用程序,如 Clementine、VLC、Zeal 与 QGtkStyle 主题一起使用,也可以根据 gnome-shell 主题进行混合。

按照一些在线说明,我尝试了没有 gtk 主题的 qt5-style-plugins。

从 pip 安装(QFusionStyle):

从 apt (QGtkStyle) 安装:

【问题讨论】:

  • 尝试将 DESKTOP_SESSION 设置为 gtk
  • 没用。 QT_QPA_PLATFORMTHEME 在这两种情况下都是相同的“appmenu-qt5”,而 DESKTOP_SESSION 是“ubuntu”
  • @HimanshuShekhar。你说“这两个版本都有不同的主题”——但与什么不同? 其中一个是您所期望的吗?或者有没有其他你期待但没有告诉我们的风格?请显示具有您期望的样式的“普通”Qt 应用程序(即不是 PyQt5 应用程序)的屏幕截图。
  • @HimanshuShekhar。 pip 安装的 PyQt5 将使用一个轮子,该轮子有自己的 Qt5 副本。这意味着它无法访问您的系统 Qt5 拥有的常用插件。第一个屏幕截图中显示的样式是默认的fusion 小部件样式。
  • @ekhumoro 我没想到融合小部件样式。我期待第二个,它与 Ubuntu 上的所有其他应用程序相同。

标签: ubuntu pyqt gtk themes pyqt5


【解决方案1】:

评论有点长,所以这里有一些事情可以尝试:

  • 设置 DESKTOP_SESSION(对您的情况没有帮助)
  • 打印 QApplication.style().metaObject().className(),看看两次运行是否相同。样式对象上可能还有其他有用的属性。还有
  • 打印 QStyleFactory.keys(),QT_STYLE_OVERRIDE 必须是打印值之一。
  • Uniform look for Qt and GTK applications
  • --style 选项覆盖 QT_STYLE_OVERRIDE 设置
  • 可能有一种插件样式在其中一个安装中被激活

【讨论】:

  • style().metaObject().className()的结果第一种是QFusionStyle,第二种是QGtkStyle。如果我通过“样式”参数尝试任何字符串,它会导致 QWindowsStyle。如何强制 QGtkStyle?我正在寻找某种方法来使更改 gnome-shell 主题也对应用程序有效。 Clementine,VLC 就是这样工作的。我在这里寻找同样的方式。帮助将是可观的。谢谢
  • @HimanshuShekhar。我已经解释了为什么你会在 pip 安装中获得默认的 fusion 样式。需要在wheel安装的Qt5的副本中添加需要的样式插件。
  • 此外,使用 pip 版本的gtk2 样式会冻结系统。看起来 pyqt 5.7 放弃了 gtk 主题支持。 apt 版本可能为此进行了调整。
  • @HimanshuShekhar。如果系统的其他部分没有使用 gtk2 风格的插件,为什么还要使用它?我以为你想让一切看起来都一样?想必,ubuntu 主要是基于 gtk3,不使用样式插件(都是基于 CSS 的)。
  • @ekhumoro 因为我试过gtk3,它看起来很糟糕。该应用程序看起来像放大了 2 倍。给出样式gtk3,它实现了QCleanlooksStyle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 2020-10-17
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多