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 on
Many of Qt's functionalities are implemented by plugins, and that is the case with styles. So in this case you must compile qtstyleplugins:
You can use the following procedure to compile qtstyleplugins:
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).
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)"
.
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
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'))"
Output:
/home/qtuser/Documents/qt_venv/lib/python3.8/site-packages/PyQt5/Qt/plugins/styles
To facilitate the work I have created a github action that generates the binaries:
63477276.yml
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 }}
and you can download the binaries for pyqt5 5.15 from here.
Test:
python -c "from PyQt5 import QtWidgets; app = QtWidgets.QApplication([]); print(QtWidgets.QStyleFactory.keys())"
Output:
['bb10dark', 'bb10bright', 'cleanlooks', 'cde', 'motif', 'plastique', 'windowsvista', 'Windows', 'Fusion']