【问题标题】:Add QStyles to Pyqt5将 QStyles 添加到 Pyqt5
【发布时间】:2020-12-08 03:35:15
【问题描述】:

我正在将我的 GUI 应用程序从 PyQt4 转换为 PyQt5。但是在 PyQt4 中,我们有很多 QStyles,例如 plastiqueCleanlooks 等。但在 PyQt5 中,我们只有 Fusion 样式以及一些普通的旧 Windows 样式。

我们如何向 PyQt5 添加更多自定义样式?

【问题讨论】:

  • @eyllanesc 我安装了 PyQt4,首先下载它的 wheel 文件,然后运行 ​​pip 命令stackoverflow.com/questions/22640640/…。 .对于 Pyqt5,我只是使用 pip 安装它。我的操作系统是 Windows 10。
  • 好问题。 Pyside2 也有类似的问题。

标签: python pyqt pyqt5 pyqt4


【解决方案1】:

Qt 的许多功能都是通过插件实现的,样式就是这种情况。所以在这种情况下你必须编译 qtstyleplugins:

您可以使用以下过程来编译qtstyleplugins:

  • 在 Windows 上安装 MSVC 2019,在 MacOS 上安装 XCode,在 Ubuntu 上安装 build-essential(如果是其他发行版,那么您应该寻找等效版本)。

  • 安装Qt,与编译pyqt5的版本相同:python -c "from PyQt5.QtCore import QT_VERSION_STR; print('Qt version', QT_VERSION_STR)"

  • 克隆存储库,然后通过执行以下命令对其进行编译(在 windows 的情况下,您必须将 make 更改为 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),您必须将其复制到路径:

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 操作:

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 }}

您可以从here 下载 pyqt5 5.15 的二进制文件。

测试:

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

输出:

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

【讨论】:

  • 所有链接都已过期,无法下载了...请帮忙
  • @Voldemort 这就是脚本的用途,运行它,您将获得二进制文件
猜你喜欢
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2021-07-19
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多