python - 在 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_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.pypython ./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/

相关文章:

python - Qlocale 和巴西货币格式

python - openpyxl - 使用列表填充列

python - 如何显示 PySide/PyQt UI 并自动运行其方法之一?

python - 无法让 Canvas 在 matplotlib 中绘制无花果

python - 如何在 Flask 中处理长 SQL 查询?

python - 如何将我的二进制 numpy 数组列表转换为图像?

python - Matplotlib 动画直方图

python - 请向我解释一下这段 python 代码是什么意思?

python-2.7 - 如何从 Office 365 管理员获取用户列表?

postgresql - 为远程服务器 pyqt 设置主机名