带有 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 无法正常工作