简体   繁体   English

将 QStyles 添加到 Pyqt5

[英]Add QStyles to Pyqt5

I'm converting my GUI application from PyQt4 to PyQt5.我正在将我的 GUI 应用程序从 PyQt4 转换为 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.但是在 PyQt4 中,我们得到了很多 QStyle,例如plastiqueCleanlooks等。但是在 PyQt5 中,我们只有Fusion样式以及一些普通的旧 Windows ZBC4150D023D3255136DB671D61AC93F2。

How can we add more custom styles to PyQt5?我们如何将更多自定义 styles 添加到 PyQt5?

Many of Qt's functionalities are implemented by plugins, and that is the case with styles. Qt 的许多功能都是通过插件实现的,styles 就是这种情况。 So in this case you must compile qtstyleplugins:所以在这种情况下你必须编译 qtstyleplugins:

You can use the following procedure to compile qtstyleplugins:您可以使用以下过程来编译 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).在 MacOS 上的 Windows、XCode 上安装 MSVC 2019 并在 Ubuntu 上安装必要的构建(如果是另一个发行版,那么您应该寻找等效版本)。

  • 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)" . 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):克隆存储库,然后通过执行以下命令对其进行编译(对于 windows,您必须将 make 更改为 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:这些命令将在文件夹“你必须复制到路径:qtstyleplugins/plugins/style”中生成二进制文件(对于 Linux,.dll 对于 windows 和 MacOS 的 .dylib 路径:

python -c "import os; from PyQt5 import QtCore; print(os.path.join(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath), 'styles'))"

Output: 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:为了方便工作,我创建了一个生成二进制文件的 github 操作:

63477276.yml 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 .您可以从此处下载 pyqt5 5.15 的二进制文件。

Test:测试:

python -c "from PyQt5 import QtWidgets; app = QtWidgets.QApplication([]); print(QtWidgets.QStyleFactory.keys())"

Output: Output:

['bb10dark', 'bb10bright', 'cleanlooks', 'cde', 'motif', 'plastique', 'windowsvista', 'Windows', 'Fusion']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM