这看起来很简单。我有一个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部分,它工作得很漂亮。当我从笔记本中调用它时,它不会添加额外的文本。它只有标准的“打开文件”。
答案 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]