使用 fbs 时无法在 pyqt5 中设置图标
Posted
技术标签:
【中文标题】使用 fbs 时无法在 pyqt5 中设置图标【英文标题】:Unable to setIcons in pyqt5 while using fbs 【发布时间】:2021-03-26 13:28:59 【问题描述】:与 fbs 一起使用时,我无法在我的 pyqt 应用程序中将图标设置为我的按钮。 无论我给 QIcon 函数提供什么路径,它都不会出错,因此我无法弄清楚我哪里出错了
我的代码
appctxt = ApplicationContext()
version = appctxt.build_settings["version"]
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Hellow World v" + version)
w = QWidget()
layout = QVBoxLayout()
btn = QPushButton("press")
btn.setIconSize(QSize(20, 20))
btn.setIcon(QIcon("../resources/256.png"))
layout.addWidget(btn)
w.setLayout(layout)
self.setCentralWidget(w)
if __name__ == '__main__':
window = MainWindow()
window.show()
exit_code = appctxt.app.exec_()
sys.exit(exit_code)
我的文件结构
【问题讨论】:
尝试绝对路径而不是"../resources/256.png"
,cwd
可能与您的预期不同
或os.path.join(os.path.dirname(__file__), "..", "resources", "256.png")
@mugiseyebrows 注意:FBS 是一个环境,其目标是能够轻松创建二进制文件,并且您的代码在转换为可执行文件时不起作用,因为__file__
将没有任何意义。跨度>
【参考方案1】:
FBS 已经有一个预定义的结构,允许在脚本执行时或将其转换为二进制后获取资源。这种结构表明“资源”必须有一个“基础”文件夹,所有发行版的公共文件都在其中(类似于“图标”文件夹),因此在您的情况下,您必须重组您的应用程序并使用ApplicationContext.get_resource()
:
.
.
├── python
│ └── main.py
└── resources
└── base
├── 1024.png
├── 256.png
└── 512.png
然后只需使用:
btn.setIcon(QIcon(appctxt.get_resource("256.png")))
【讨论】:
以上是关于使用 fbs 时无法在 pyqt5 中设置图标的主要内容,如果未能解决你的问题,请参考以下文章