Python : 浏览目录的对话框(加载 PyQt4 出错,内核死机)

Python : Dialog to browse for a directory (loading PyQt4 gives an error, and kernel dies)

我正在使用 Canopy 版本 1.6.4(截至 2016 年 4 月的最新版本),我只是想进行对话,要求用户在弹出窗口中浏览文件夹(目录)window,python 将文件夹名称和路径作为变量。

无论我在使用 PyQt4 时尝试什么,我都会收到以下错误消息:

导入错误: IPython 禁用了导入 PyQt4,它有 已经导入了不兼容的 QT 绑定:pyside

我发现很多其他人也遇到过类似的事情(例如:How can I use Pyqt with Enthought Canopy and this answer which I found incomprehensible : https://github.com/ipython/ipython/issues/2955/),但没有关于如何解决这个问题的简单答案(我对 Python和 Python 环境)。任何人都可以推荐一个快速的狐狸,或者更好的另一种制作简单 x 平台(Mac 和 windows)对话框的方法(Tkinter 在 Canopy 上也不起作用!!!)。

此随附的屏幕截图不适用于浏览器 window,但这会给出相同的错误消息; Jupiter notebook 和 iPython.

也是如此

仅供参考:即使不导入 PySide,我也会收到此错误! (我只导入了一次,但之后就没有了)。

谢谢!

Qt 有两种不同的 python 绑定——PyQt 和 PySide。您不能同时使用两者。您甚至不能将它们都导入到同一个 python 会话中。我猜您是从 IDE 内的嵌入式 python 控制台中启动它的,该控制台已选择使用 PySide(这就是您收到此错误的原因)。

你有两个选择。

  1. 使用 PySide 而不是 PyQt。
  2. 从常规控制台(例如 cmd.exe、终端、bash)而不是 IDE 中的嵌入式控制台启动脚本(不会预加载 PySide你可以使用 PyQt)。

PyQt 和 PySide 非常相似,在大多数情况下您只需更改导入语句即可。

from PySide import QtGui, QtCore

对于如何创建对话框以选择目录的原始问题,您可以使用 QFileDialog.getExistingDirectory

import sys
from PySide import QtGui, QtCore


class Dialog(QtGui.QDialog):

    def __init__(self, parent):
        super(Dialog, self).__init__(parent)
        self.ui_lay = QtGui.QHBoxLayout()
        self.setLayout(self.ui_lay)
        self.ui_line = QtGui.QLineEdit(self)
        self.ui_lay.addWidget(self.ui_line)
        self.ui_btn = QtGui.QPushButton('...', self)
        self.ui_lay.addWidget(self.ui_btn)
        self.ui_btn.clicked.connect(self.browse)

    @QtCore.Slot()  # for pyqt, QtCore.pyqtSlot()
    def browse(self):
        path = QtGui.QFileDialog.getExistingDirectory(self, 'Pick a Folder')
        if path:
            self.ui_line.setText(path)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dlg = Dialog(None)
    dlg.show()
    app.exec_()