QtGui.QFileDialog.getExistingDirectory()选择目录后窗口不会关闭(PyQt)

2024-10-01 17:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python程序中使用QtGui.QFileDialog.getExistingDirectory()对话框窗口获得一个路径,以便在程序的其余部分都在控制台输出时为用户简化操作。 我有这样一段代码:

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函数,对话框窗口将保持打开状态,直到调用该函数的脚本结束,而不是在该指令之后关闭:

^{pr2}$

如果您运行此代码,它将创建一个文件,该文件将与对话框窗口一起保存的目录保存在运行脚本的文件夹中。在

我做错什么了?在

顺便说一下,我在Ubuntu 12.04上。 谢谢您! 干杯


Tags: thepathnamenewgetosfolderfilename
1条回答
网友
1楼 · 发布于 2024-10-01 17:39:05

在一个虚拟机中设置了Ubuntu12.04之后,我可以确认在点击“打开”后对话框没有正确关闭。在

问题似乎是由于试图退出get_new_path函数内的QApplication引起的。在

相反,您应该创建一个单独的全局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()

相关问题 更多 >

    热门问题