Python 在PyQt应用程序中浸泡dict

Python 在PyQt应用程序中浸泡dict,python,python-2.7,pyqt,pickle,Python,Python 2.7,Pyqt,Pickle,我试图在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_

我试图在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 file
的文件

然后,您将查找脚本旁边的
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'



但是,更好的解决方案是使用适合平台的“应用程序数据”目录或“主页”或“文档”目录(取决于您是否希望文件对新手用户可见);Qt有很好的包装器,可以通过平台无关代码以适合平台的方式轻松实现这一点。

到底是什么让你认为它“完全忽略了声明”?谢谢,这就是问题所在。我只在我编写的非gui应用程序中使用过pickle,在这种情况下,它会将pickle文件保存在运行程序的任何目录中,所以我是在这种假设下使用的。当你说“使用适合平台的“应用程序数据”目录或主页或文档”时,你的意思是使用指向文档文件夹的my path目录或其他什么,然后像上面那样使用join?@DreamPie:这与pickle、GUI应用程序甚至Python都没有关系;每当您在任何应用程序中指定一个没有路径的文件名时,您都会在当前工作目录中得到一个文件。@DreamPie:同时,当我说“使用合适的平台…”时,有三种不同的选项。选择合适的路径,使用Qt函数返回该路径,然后将该路径加入文件名。我敢肯定,这些都是在Qt或PyQt教程的早期演示的。