Python 包:启动脚本时未加载样式表

Python package: Stylesheet not loaded when launching script

我有一个结构如下的包:

package
├── LICENSE
├── README.md
├── MANIFEST.in
├── my_pkg
│   └── __init__.py
│   └── main.py
│   └── style.qss
├── setup.py

当我使用 pip 从 github 安装它时,样式表文件 style.qss 被克隆,但是当我启动脚本输入 foopkg 时它没有加载。这是我的 setup.py 文件:

setup.py

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="my_pkg",
    version="0.0.1",
    author="foo",
    author_email="foo@mail.com",
    description="A small gui",
    long_description=long_description,
    long_description_content_type="text/markdown",
    # url="https://github.com/foo/pkg",
    include_package_data=True,
    packages=setuptools.find_packages(),
    install_requires=[
        'PyQt5',
    ],
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.7',
    entry_points={
        "gui_scripts": [
            "foopkg = my_pkg.main:main",
        ]
    }
)

这是我的 MANIFEST.in 文件:

MANIFEST.in

recursive-include my_pkg *.qss

main.py是

main.py

import sys
    ...
def main():
    app = QApplication(sys.argv)
    style_path = sys.path[0] + '/style.qss'

    file = QFile(style_path)
    file.open(QFile.ReadOnly)
    stream = QTextStream(file.readAll())
    app.setStyleSheet(stream.readAll())

    gui = GuiWindow()
    gui.show()

    app.exec_()


if __name__ == '__main__':
    main()

我错过了什么?我应该修改什么才能使用 样式表 调用我的脚本?

构建路由时必须考虑每个部分包含的信息,例如 sys.path[0] 包含应用程序启动位置的信息,例如在 Linux 中启动入口点时我的情况是 /usr/bin。相反,您应该使用 __file__ 属性:

import os


CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))

def main():
    app = QApplication(sys.argv)
    style_path = os.path.join(CURRENT_DIR, 'style.qss')

    file = QFile(style_path)
    # ...