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(这就是您收到此错误的原因)。
你有两个选择。
- 使用 PySide 而不是 PyQt。
- 从常规控制台(例如 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_()
我正在使用 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(这就是您收到此错误的原因)。
你有两个选择。
- 使用 PySide 而不是 PyQt。
- 从常规控制台(例如 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_()