我试图在我的 PyQt 应用程序中转储一个 pickle 文件,但它似乎完全忽略了该语句。
import cPickle as pickle
class MyActions(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
#Create blank dictionary and save it.
self.employee_dict = {}
pickle.dump(self.employee_dict, open("pickle file", 'wb'))
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.emp_display )
QtCore.QObject.connect(self.ui.pushButton_2, QtCore.SIGNAL('clicked()'), self.admin_display)
我在这里做错了什么,还是pickle与在PyQt gui中转储字典不兼容。
最佳答案
尽管您的问题没有足够的信息来继续,但我愿意打赌我知道答案。
您将在当前目录中创建一个名为 pickle 文件
的文件。
然后,您将在脚本旁边查找 pickle 文件
,该文件通常不会是当前目录。
在特殊情况下,您从命令行运行脚本作为 ./foo.py
或 python ./foo.py
,当然,两个碰巧是相同的。但是,当您双击 PyQt 应用程序时,它……嗯,这取决于您所在的平台以及各种 Explorer/Finder/Nautilus/等。设置(全局或每个应用程序),但通常不会与脚本所在的位置相同。
如果您只是想强制它写入脚本旁边的文件(这通常是一个坏主意),您可以在启动时保存脚本目录,如下所示:
import os
import sys
scriptdir = os.path.dirname(sys.argv[0])
然后,您可以写入 os.path.join(scriptdir, 'pickle file')
,而不是写入 'pickle file'
。
但是,更好的解决方案是使用适合平台的“app data”目录或“home”或“documents”目录(取决于您是否希望该文件对新手用户可见); Qt 有很好的包装器,可以使用平台无关的代码以适合平台的方式轻松实现这一点。
关于python - 在 PyQt 应用程序中 pickle 一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675640/