从Jupyter Notebook调用函数不读取字符串

时间:2017-10-23 19:31:50

标签: python qt function jupyter-notebook

这看起来很简单。我有一个Jupyter Notebook,下面的代码允许文件对话框,以便用户可以选择要分析的文件。使用了几个不同的文件,用户必须以正确的顺序选择正确的文件。我正在尝试向Window标题添加信息,以便用户知道脚本正在查找哪个文件。

这是Notebook代码:

import PCB_utility
f_name = PCB_utility.get_file('Select Bitwise data file')
df_bitwise = pd.read_excel(f_name, sheetname = 'lvtemporary_653630', header=(0))
f_name = PCB_utility.get_file('Select ARINC 429 data file')
df_ARINC = pd.read_csv(f_name, sep = '\t', header=(0))

文件对话框有效。用户选择文件,程序只需执行所需操作。我想让它更友好一点。 PCB_utility看起来像这样:

import sys
from PyQt4.QtGui import *
#from PyQt4.QtCore import *

def get_file(Instructions):
    filename = QFileDialog.getOpenFileName(None, Instructions, '/')
    return(filename)

问题是指令没有通过对话框。我手动将此功能输入到IPython部分,它工作得很漂亮。当我从笔记本中调用它时,它不会添加额外的文本。它只有标准的“打开文件”。

2 个答案:

答案 0 :(得分:0)

以下是最终有效的代码:

import sys
from PyQt4.QtGui import *


def get_file(Instructions):

# Create an PyQT4 application object.
    app = QApplication(sys.argv) 

# The QWidget widget is the base class of all user interface objects in PyQt4.
    wid = QWidget()

# Get filename using QFileDialog
    filename = QFileDialog.getOpenFileName(wid, Instructions, '/')
    return(filename)

    sys.exit(app.exec_()) 

我需要添加PyQt4应用程序和小部件,然后关闭它。我不得不承认我不太明白为什么,但它确实有效。

答案 1 :(得分:0)

OP已经找到了解决方案,但是对于其他寻找相同事物的人-您可以使用IPython magic命令启用IPython GUI事件循环集成,以制作从IPython(即Jupyter笔记本)调用的外部GUI:

# Magic (we must tell IPython that we will be running an external Qt GUI)
%gui qt5

from PyQt5.QtWidgets import QFileDialog

def select_file(directory='./'):
    fname = QFileDialog.getOpenFileName(None,
                                        'Select file...', 
                                        directory,
                                        filter='All files (*)')
    return fname[0]

由于最初的问题是关于PyQt4的,因此上述命令%gui qt5应该替换为%gui qt4或仅替换%gui qt

要在没有魔术命令的情况下做同样的事情(类似于OP的解决方案):

import sys
from PyQt5.QtWidgets import QApplication, QFileDialog

def select_file(directory='./'):
    app = QApplication(sys.argv)

    fname = QFileDialog.getOpenFileName(None,
                                        'Select file...', 
                                        directory,
                                        filter='All files (*)')
    return fname[0]