将 QStyles 添加到 Pyqt5 [英] Add QStyles to Pyqt5
问题描述
我正在将我的 GUI 应用程序从 PyQt4 转换为 PyQt5.但是在 PyQt4 中,我们得到了很多 QStyles,如 plastique
、Cleanlooks
等.但在 PyQt5 中,我们只有 Fusion
样式以及一些普通的旧 Windows 样式.
I'm converting my GUI application from PyQt4 to PyQt5. But in PyQt4 we get so many QStyles like plastique
, Cleanlooks
etc. But in PyQt5 we have only Fusion
style along with some plain old Windows styles.
我们如何为 PyQt5 添加更多自定义样式?
How can we add more custom styles to PyQt5?
推荐答案
Qt 的许多功能都是通过插件实现的,样式也是如此.所以在这种情况下你必须编译qtstyleplugins:
Many of Qt's functionalities are implemented by plugins, and that is the case with styles. So in this case you must compile qtstyleplugins:
您可以使用以下程序来编译qtstyleplugins:
You can use the following procedure to compile qtstyleplugins:
在 Windows 上安装 MSVC 2019,在 MacOS 上安装 XCode,在 Ubuntu 上安装 build-essential(如果是其他发行版,那么您应该寻找等效版本).
Install MSVC 2019 on Windows, XCode on MacOS and build-essential on Ubuntu (in case of another distro then you should look for the equivalent).
安装Qt,与编译pyqt5的版本相同:python -c "from PyQt5.QtCore import QT_VERSION_STR;print('Qt version', QT_VERSION_STR)"
.
Install Qt, the same version with which pyqt5 was compiled: python -c "from PyQt5.QtCore import QT_VERSION_STR; print('Qt version', QT_VERSION_STR)"
.
克隆存储库,然后通过执行以下命令编译它(在 Windows 的情况下,您必须将 make 更改为 nmake):
Clone the repository and then compile it by executing the following commands (in the case of windows you must change make to nmake):
git clone https://code.qt.io/qt/qtstyleplugins.git
cd qtstyleplugins
qmake
make
make install
这些命令将在文件夹qtstyleplugins/plugins/styles/"中生成二进制文件(Linux 为 .so,Windows 为 .dll,MacOS 为 .dylib).您必须复制到路径:
These commands will generate the binaries (.so for Linux, .dll for windows and .dylib for MacOS) in folder "qtstyleplugins/plugins/styles/" that you must copy to the path:
python -c "import os; from PyQt5 import QtCore; print(os.path.join(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath), 'styles'))"
输出:
/home/qtuser/Documents/qt_venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/styles
为了方便工作,我创建了一个生成二进制文件的 github 操作:
To facilitate the work I have created a github action that generates the binaries:
name: question_63477276
on: [push]
jobs:
ci:
name: ${{ matrix.os.name }} Python-${{ matrix.python }} Qt-${{ matrix.qt }}
runs-on: ${{ matrix.os.runs-on }}
strategy:
fail-fast: false
matrix:
os:
- name: Windows
extension: "*.dll"
runs-on: windows-latest
- name: Linux
extension: "*.so"
runs-on: ubuntu-latest
- name: MacOS
extension: "*.dylib"
runs-on: macos-latest
python: [3.6, 3.7, 3.8]
qt: [5.15.0]
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Install Linux dependencies
if: matrix.os.name == 'Linux'
run: |
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python }}
architecture: x64
- name: install pyqt5
run: pip install pyqt5
- name: before
uses: GabrielBB/xvfb-action@v1.2
with:
run: python -c "from PyQt5 import QtWidgets; app = QtWidgets.QApplication([]); print(QtWidgets.QStyleFactory.keys())"
- name: Install Qt
uses: jurplel/install-qt-action@v2
with:
version: ${{ matrix.qt }}
dir: ${{ github.workspace }}/qt/
- name: clone qtstyleplugins
run: git clone https://code.qt.io/qt/qtstyleplugins.git
- name: compile qtstyleplugins in Windows
if: matrix.os.name == 'Windows'
shell: cmd
run: |
call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
cd qtstyleplugins
qmake
nmake
nmake install
- name: compile qtstyleplugins in Linux or MacOS
if: matrix.os.name == 'Linux' || matrix.os.name == 'MacOS'
run: |
cd qtstyleplugins
qmake
make
make install
- name: copy binaries
run: python questions/63477276/search_binaries.py qtstyleplugins/plugins/styles/
- name: after
uses: GabrielBB/xvfb-action@v1.2
with:
run: python -c "from PyQt5 import QtWidgets; app = QtWidgets.QApplication([]); print(QtWidgets.QStyleFactory.keys())"
- name: upload
uses: actions/upload-artifact@v2
with:
path: qtstyleplugins/plugins/styles/${{ matrix.os.extension }}
name: qtstyleplugins-${{ matrix.os.name }}-Python${{ matrix.python }}-Qt${{ matrix.qt }}
您可以从此处下载 pyqt5 5.15 的二进制文件.
and you can download the binaries for pyqt5 5.15 from here.
测试:
python -c "from PyQt5 import QtWidgets; app = QtWidgets.QApplication([]); print(QtWidgets.QStyleFactory.keys())"
输出:
['bb10dark', 'bb10bright', 'cleanlooks', 'cde', 'motif', 'plastique', 'windowsvista', 'Windows', 'Fusion']
这篇关于将 QStyles 添加到 Pyqt5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!