如何指示PySide2应用程序使用qt5ct设置?

时间:2018-09-20 13:36:59

标签: python pyside2

我正在尝试非常简单的PySide2教程示例,并注意到样式和字体大小与“常规” Qt应用程序的样式非常不同。

我在Linux Mint 18中使用qt5ct,但是PySide2应用忽略了设置:

enter image description here

应用程序非常简单:

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QFile, Qt

if __name__ == "__main__":
    app = QApplication(sys.argv)
    file = QFile("mainwindow.ui")
    file.open(QFile.ReadOnly)
    loader = QUiLoader()
    window = loader.load(file)
    window.show()
    sys.exit(app.exec_())

是否有任何指示其使用qt5ct设置的方法? Google没有提供任何有用的信息,因此任何提示都值得赞赏!

2 个答案:

答案 0 :(得分:1)

为了使所有应用程序都使用qt5ct,必须将QT_QPA_PLATFORMTHEME = "qt5ct"建立为会话或系统的变量,例如在~/.xprofile中:

[ "$XDG_CURRENT_DESKTOP" = "KDE" ] || [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] || export QT_QPA_PLATFORMTHEME="qt5ct"

如果只想在您的应用程序中建立,则必须通过命令行传递它:

python /path/of/your/script.py --platformtheme qt5ct

或者最好通过代码添加它:

import sys
from PySide2 import QtCore, QtWidgets, QtUiTools


if __name__ == "__main__":
    sys.argv.extend(["--platformtheme", "qt5ct"]) 
    app = QtWidgets.QApplication(sys.argv)
    file = QtCore.QFile("mainwindow.ui")
    file.open(QtCore.QFile.ReadOnly)
    loader = QtUiTools.QUiLoader()
    window = loader.load(file)
    window.show()
    sys.exit(app.exec_())

答案 1 :(得分:1)

几次在这里找到自己,最终找到了自己的解决方案。

请参见https://bugreports.qt.io/browse/PYSIDE-842

当通过pip安装pyside2但由系统安装Qt时,似乎会发生此问题(在我的情况下为Manjaro / Arch)。

这是使用pyside2的pip版本时得到的:

>>> from PySide2.QtWidgets import QStyleFactory
>>> print(QStyleFactory.keys())

[u'Windows', u'Fusion']

当使用arch linux打包的pyside2时,我得到:

>>> from PySide2.QtWidgets import QStyleFactory
>>> print(QStyleFactory.keys())

['Adwaita-Dark', 'Adwaita', 'Breeze', 'bb10dark', 'bb10bright', 'kvantum-dark', 'kvantum', 'cleanlooks', 'gtk2', 'cde', 'motif', 'plastique', 'qt5ct-style', 'Oxygen', 'Windows', 'Fusion']

使用系统附带的pyside2软件包(sudo pacman -S pyside2)为我解决了此问题。我的pyside2应用程序现在使用系统Qt主题。