Python PyCharm和PyQT QFileDialog之间的奇怪交互

Python PyCharm和PyQT QFileDialog之间的奇怪交互,python,python-3.x,pyqt,pycharm,pyqt5,Python,Python 3.x,Pyqt,Pycharm,Pyqt5,我已经用Python3+QT5编写了一个程序。当我从终端运行它时,它似乎工作正常 当我从PyCharm运行它时,它会解散 我将使用一个命令来提供某个本地文件aaa.json的路径。然而,我最终得到的路径类似于“/run/user/1000/doc/69158495/aaa.json”。当我第二次调用同一个命令时,结果是一个空字符串,即使我提供了正确的路径。最奇怪的是,我的GUI后来停止了。它不会对任何按钮做出反应,只能从PyCharm内停止。不会抛出任何错误消息 当我从终端运行代码时,我可以调用

我已经用Python3+QT5编写了一个程序。当我从终端运行它时,它似乎工作正常

当我从PyCharm运行它时,它会解散

我将使用一个命令来提供某个本地文件aaa.json的路径。然而,我最终得到的路径类似于“/run/user/1000/doc/69158495/aaa.json”。当我第二次调用同一个命令时,结果是一个空字符串,即使我提供了正确的路径。最奇怪的是,我的GUI后来停止了。它不会对任何按钮做出反应,只能从PyCharm内停止。不会抛出任何错误消息

当我从终端运行代码时,我可以调用getSaveFileName任意次数,它总是返回正确的路径,不会停止

有什么想法吗

编辑:好的,这里有一个超简单的例子。当我在pycharm中运行此代码并在我的主目录中提供新文件的路径时,“path”变量的值以“/run/user/1000/…”开头

import sys
from PyQt5 import QtGui, QtCore, QtWidgets

app = QtWidgets.QApplication(sys.argv)
mainwindow = QtWidgets.QMainWindow()
path = QtWidgets.QFileDialog.getSaveFileName(None, "Save JSON file", "./", "JSON Files (*.json)")[0]
print(path)
根据,似乎在PyCharm的环境中运行程序,RuntimeLocation被用作根路径的引用

添加DontUseNativeDialog选项标志可以解决以下问题:

path = QtWidgets.QFileDialog.getSaveFileName(
    None, "Save JSON file", "./", "JSON Files (*.json)", 
    options=QtWidgets.QFileDialog.DontUseNativeDialog)[0]
如果您希望在开发环境之外继续使用本机对话框,您最终可以在启动时添加某种-debug标志,在从PyCharm运行时使用该标志,并在使用静态函数之前添加对该选项的检查,或者最终将默认选项设为全局变量