在PyQt应用程序中挑选一个字典

时间:2014-09-04 21:59:51

标签: 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_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旁边的倾销字典兼容。

1 个答案:

答案 0 :(得分:1)

即使您的问题没有足够的信息可以继续,我也愿意打赌我知道答案。

您正在创建一个名为pickle file的文件,无论当前目录是什么。

然后你要去寻找脚本旁边的pickle file,这通常不会是当前目录。

在您从命令行运行脚本./foo.pypython ./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有很好的包装器,可以使用与平台无关的代码以适合平台的方式轻松完成。