带有 PySide2 的文件浏览器:获取文件的路径,然后终止 GUI

Posted

技术标签:

【中文标题】带有 PySide2 的文件浏览器:获取文件的路径,然后终止 GUI【英文标题】:File Browser with PySide2: get the path of the file and then kill the GUI 【发布时间】:2020-04-01 18:25:37 【问题描述】:

我有以下代码并想要执行以下操作:

最重要的一点:单击文件并获取其文件路径后,我希望 GUI 退出,因为我只需将该路径提供给另一个脚本 (another_script),然后我将导入该脚本

我的问题是,在脚本成功打印所选文件的路径后,GUI 不会自行终止,我无法运行 another_script 并且卡在终端中

import sys
from PySide2.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PySide2.QtGui import QIcon

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.openFileNameDialog()

    def openFileNameDialog(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self,
            "QFileDialog.getOpenFileName()", 
            "","All Files (*);;Python Files (*.py)", 
            options=options)
        if fileName:
            print(fileName)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
import another_script

【问题讨论】:

【参考方案1】:

即使您选择了文件,事件循环仍将继续运行,一个可能的解决方案是使用 QTimer 调用 QXApplication.quit() 但仍然存在问题:该方法将使 exec_() 方法返回0 由 sys.exit() 获取,因此应用程序将被关闭。但是以上所有这些都是不必要的,因为如果您只想获取文件的路径,那么您不需要使用 QWidget,您可以使用以下内容:

import sys
from PySide2.QtWidgets import QApplication, QFileDialog


def get_filename():
    app = QApplication([])
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    fileName, _ = QFileDialog.getOpenFileName(
        None,
        "QFileDialog.getOpenFileName()",
        "",
        "All Files (*);;Python Files (*.py)",
        options=options,
    )
    return fileName


if __name__ == "__main__":
    filename = get_filename()
    if filename:
        print(filename)

【讨论】:

以上是关于带有 PySide2 的文件浏览器:获取文件的路径,然后终止 GUI的主要内容,如果未能解决你的问题,请参考以下文章

带有 Pyside2 和 Matplotlib 的 Pyinstaller 无法正常工作

带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres

怎么用python2.7解析pyside2

从内容 URI 中获取搜索图像的绝对文件路径

C#获取带有路径的数组的文件大小

使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form