我试图在我的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)
我在这里做错了什么,或者只是与PyQt gui旁边的倾销字典兼容。
答案 0 :(得分:1)
即使您的问题没有足够的信息可以继续,我也愿意打赌我知道答案。
您正在创建一个名为pickle file
的文件,无论当前目录是什么。
然后你要去寻找脚本旁边的pickle file
,这通常不会是当前目录。
在您从命令行运行脚本./foo.py
或python ./foo.py
的特殊情况下,当然,两者恰好相同。但是当你双击PyQt应用程序时,它就是......好吧,这取决于你所使用的平台,以及各种Explorer / Finder / Nautilus等。设置(全局或每个应用程序),但通常不会与脚本相同。
如果你只想强制它在脚本旁边写文件(这通常是个坏主意),你可以在启动时保存脚本目录,如下所示:
import os
import sys
scriptdir = os.path.dirname(sys.argv[0])
然后,您可以写信'pickle file'
。
os.path.join(scriptdir, 'pickle file')
但是,更好的解决方案是使用适合平台的“app data”目录或“home”或“documents”目录(取决于您是否希望新手用户可以看到该文件); Qt有很好的包装器,可以使用与平台无关的代码以适合平台的方式轻松完成。