代码之家  ›  专栏  ›  技术社区  ›  ecjb

使用PySide2的文件浏览器:获取文件的路径,然后关闭GUI

  •  0
  • ecjb  · 技术社区  · 6 年前

    我有以下代码,并希望执行以下操作:

    • 最重要的一点是:一旦我点击了文件并获取了它的文件路径,我希望GUI退出,因为这样我就可以将该路径提供给另一个脚本( another_script )然后我会导入

    我的问题是,在脚本成功打印所选文件的路径后,GUI不会自行终止,我无法运行 另一个脚本 我被困在航站楼了

    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 回复  |  直到 6 年前
        1
  •  2
  •   eyllanesc    6 年前

    即使您选择了文件,事件循环仍将继续运行,一种可能的解决方案是使用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)
    
    推荐文章