IPython Notebook:使用GUI打开/选择文件(Qt对话框)
当您在笔记本上对不同的数据文件执行相同的分析时,可能会很方便地以图形方式选择一个数据文件。
在我的Python脚本中,我通常实现一个QT对话框,它返回所选文件的文件名:
from PySide import QtCore, QtGui
def gui_fname(dir=None):
"""Select a file via a dialog and return the file name.
"""
if dir is None: dir ='./'
fname = QtGui.QFileDialog.getOpenFileName(None, "Select data file...",
dir, filter="All files (*);; SM Files (*.sm)")
return fname[0]
但是,从笔记本运行此功能
full_fname = gui_fname()
导致内核死亡(并重新启动):
有趣的是,在3个单独的单元格中将这3个命令拼凑起来
%matplotlib qt
full_fname = gui_fname()
%matplotlib inline
但是当我把这些命令放在一个单独的单元中时,内核再次死亡。
这可以防止创建一个像gui_fname_ipynb()
这样的函数,它透明地允许用GUI选择文件。
为了方便起见,我创建了一个说明问题的笔记本:
有关如何在IPython Notebook中执行文件选择对话框的任何建议?
这种行为是IPython中的一个错误:
https://github.com/ipython/ipython/issues/4997
这是固定在这里:
https://github.com/ipython/ipython/pull/5077
打开gui对话框的功能应该适用于当前的主控和即将发布的2.0版本。
到目前为止,最新的1.x版本(1.2.1) 不包含修复的后退端口。
编辑:示例代码仍然崩溃IPython 2.x,请参阅此问题。
在windows(Python 3.6.2,IPython 6.1.0)上使用Anaconda 5.0.0,以下两个选项都适用于我。
选项1:完全在Jupyter笔记本中:
CELL 1:
%gui qt
from PyQt5.QtWidgets import QFileDialog
def gui_fname(dir=None):
"""Select a file via a dialog and return the file name."""
if dir is None: dir ='./'
fname = QFileDialog.getOpenFileName(None, "Select data file...",
dir, filter="All files (*);; SM Files (*.sm)")
return fname[0]
小区2:
gui_fname()
这对我有用,但似乎有点脆弱。 如果我将这两件事合并到同一个单元中,它就会崩溃。 或者如果我省略%gui qt
,它会崩溃。 如果我“重新启动内核并运行所有单元”,它不起作用。 所以我有点喜欢这个其他的选择...
更可靠的选项:独立的脚本,可在新过程中打开对话框
(基于这里的mkrog代码。)
将以下内容放入单独的脚本中: blah.py
:
from sys import executable, argv
from subprocess import check_output
from PyQt5.QtWidgets import QFileDialog, QApplication
def gui_fname(directory='./'):
"""Open a file dialog, starting in the given directory, and return
the chosen filename"""
# run this exact file in a separate process, and grab the result
file = check_output([executable, __file__, directory])
return file.strip()
if __name__ == "__main__":
directory = argv[1]
app = QApplication([directory])
fname = QFileDialog.getOpenFileName(None, "Select a file...",
directory, filter="All files (*)")
print(fname[0])
...在JUPYTER NOTEBOOK中
import blah
blah.gui_fname()
链接地址: http://www.djcxy.com/p/18089.html
上一篇: IPython Notebook: Open/select file with GUI (Qt Dialog)