我正在尝试在QtGui.QFileDialog.getExistingDirectory()
程序中使用python
对话框窗口获取路径,以便为用户提供便利,同时程序的其余部分在控制台输出中。
为此目的我有这段代码:
import sys, os
from PyQt4 import QtGui
def getpath(filename,
noPathFileMsg='',
wrongFolderMsg='',
selectFolderMsg=''):
try:
f = open('./'+filename,'r')
except IOError:
folder = get_new_path(filename,
noPathFileMsg,
selectFolderMsg)
else:
folder = f.readline()
f.close()
currentDir = os.getcwd()
try:
os.chdir(folder)
except:
folder = get_new_path(filename,
wrongFolderMsg,
selectFolderMsg)
else:
os.chdir(currentDir)
finally:
return folder
def get_new_path(filename,
infoMsg,
selectFolderMsg):
app = QtGui.QApplication(sys.argv)
QtGui.QMessageBox.about(None, 'No folder', infoMsg)
folder = QtGui.QFileDialog.getExistingDirectory(None, selectFolderMsg)
app.exit()
if os.name == 'posix':
folder += '/'
elif os.name == 'nt':
folder += '\\'
g = open('./'+filename,'w')
g.write(folder)
g.close()
return folder
if __name__ == '__main__':
folderPath = getpath('pathtofolder.txt',
noPathFileMsg='The path to the folder has not been set',
wrongFolderMsg='The path folder saved cannot be reached',
selectFolderMsg='Please select a folder')
print folderPath
var = input('The program stopped at the input instruction, the dialog window should now be closed!')
如果我调用getpath函数,对话框窗口将保持打开状态,直到调用该函数的脚本结束而不是在此指令之后关闭:
folder = QtGui.QFileDialog.getExistingDirectory(None, selectFolderMsg)
如果您运行此代码,它将创建一个文件,将使用对话框窗口保存的目录保存在运行脚本的文件夹中。
我做错了什么?
顺便说一下,我在Ubuntu 12.04上。 谢谢! 干杯
答案 0 :(得分:2)
在VM中设置Ubuntu 12.04后,我可以确认单击“打开”后对话框没有正确关闭。
问题似乎是由于尝试退出QApplication
函数中的get_new_path
而造成的。
相反,您应该创建一个全局QApplication
对象,并且只在脚本完成时退出它:
def get_new_path(filename, infoMsg, selectFolderMsg):
QtGui.QMessageBox.about(None, 'No folder', infoMsg)
folder = QtGui.QFileDialog.getExistingDirectory(None, selectFolderMsg)
...
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
folderPath = getpath(...)
app.exit()