【发布时间】:2020-04-30 16:35:55
【问题描述】:
我在构建脚本的 pyinstaller onefile 版本时遇到问题,我的复选框状态未保存,但另一方面,当 pyinstaller 使用文件构建普通 exe 时,复选框状态已保存并且可以正常工作。
请注意,我正在使用资源(包)>__init__.py 来存储我的图标和 config.ini,并且这些图标在 onefile 或正常构建两种情况下都有效。
项目文件图片
__init__.py contents
from pathlib import Path
resources = Path(__file__).parent
config_ini = resources / "config.ini"
My PyQt5 Gui.
import sys
from PyQt5.QtCore import QSettings
import resources
import PyQt5.QtCore
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
settings = QSettings(str(resources.config_ini), QSettings.IniFormat)
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.main_ui()
self.buttons()
self.layout()
self.show()
settings.sync()
def main_ui(self):
self.setWindowTitle("Files Organizer")
def buttons(self):
self.checkbox_startup = QCheckBox("Run on start up")
self.checkbox_startup.setChecked(False)
self.checkbox_startup.setChecked(settings.value("startup_state", type=bool))
self.checkbox_startup.toggled.connect(self.startup_settings)
def layout(self):
self.horizontalGroupBox_options = QGroupBox("Options", self)
verticalbox_options = QVBoxLayout()
verticalbox_options.addWidget(self.checkbox_startup)
self.horizontalGroupBox_options.setLayout(verticalbox_options)
self.horizontalGroupBox_options.resize(360, 80)
self.horizontalGroupBox_options.move(20, 110)
def startup_settings(self):
startup_state = self.checkbox_startup.isChecked()
settings.setValue("startup_state", startup_state)
print("startup state is ", settings.value("startup_state", type=bool))
if __name__ == "__main__":
app = QApplication(sys.argv)
screen = Window()
screen.show()
app.exec()
【问题讨论】:
-
resources是什么,提供一个minimal reproducible example,显示resources.py的内容。你的 Python、PyQt5、Pyinstaller 版本是什么? -
你的代码产生了很多错误
-
这是一个确定的代码,可以显示我的整个 GUI 太长的代码。我正在使用 Pyinstaller 3.6,PyQt5 12.7.0
-
我没有问你项目的代码,我问你要一个 MRE,如果你的项目很小,那么它可以是一个 MRE,但如果你的项目看起来像你的情况一样大那么你必须创建一个新项目来具体解决问题。
-
将使可工作的代码少之又少。
标签: python pyqt pyqt5 pyinstaller qsettings