繁体   English   中英

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

[英]Calling function from Jupyter Notebook not reading string

这看起来很简单。 我有一个Jupyter 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部分中手动输入了此函数,并且效果很好。 当我从笔记本上调用时,它不会添加多余的文本。 它只是具有标准的“打开文件”。

这是最终起作用的代码:

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应用程序和小部件,然后将其关闭。 我不得不承认我不太明白为什么,但是它有效。

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

# 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM