python - 与 PyQt5 QFileDialog 混淆

标签 python pyqt5 qfiledialog

我正在尝试编写一个带有 GUI 文件选择对话框的简单脚本,并将所选文件名返回到主程序代码。我在网上查找了一些想法,但我对这一切是如何运作的感到困惑。我有以下代码:

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

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'Bla'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.openFileNameDialog()

        self.show()

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

        return(fileName)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    alert = QMessageBox()
    alert.setText(f'selected file {ex}')
    alert.exec_()    
    sys.exit(app.exec_())

我添加了一个消息框来查看文件选择是否正常工作,但如果我运行它,消息框将显示:

selected file <_main_.App object at 0x0000000002EA9288>

同时,当我将消息框放入 openFileNameDialog 中时,一切正常:

~snip~

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

        alert = QMessageBox()
        alert.setText(f'selected file {fileName}')
        alert.exec_()

~snip~

所以问题是如何将文件名正确返回到主程序?感谢您提前的帮助!

最佳答案

  • 什么是ex它是一个代表小部件的变量,而不是文件名。
  • 什么返回 openFileNameDialog 保存在某个变量中?不,那么该信息就会丢失。如果您想获取在某种方法中创建的信息,那么另一种方法是将其保存为类的属性。

考虑到上述情况,解决方案是:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QMessageBox


class App(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.fileName = ""
        self.initUI()

    def initUI(self):
        self.setWindowTitle("Bla")
        self.setGeometry(10, 10, 640, 480)
        self.openFileNameDialog()
        self.show()

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


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    alert = QMessageBox()
    alert.setText(f"selected file {ex.fileName}")
    alert.exec_()
    sys.exit(app.exec_())

关于python - 与 PyQt5 QFileDialog 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244412/

相关文章:

使用 pandas read_csv 方法的 Python 多级索引

python - 如何获取 QFileSystemModel 和 QTreeView 中的选定项目

Python PyQt4 QFileDialog 图像并在 QListWidget 中加载

Python PyQt Pyside - QFileDialog 中的 setNameFilters 不起作用

python - 在 Python 中跨数据帧搜索并替换匹配值

python - 如何在 Apache 上使用基本的 Python CGI 脚本处理 POST 请求?

python - conda 警告我应该更新 conda,但更新一直失败

python - 对齐 QTableWidgetItem 会导致 item 为 None

python - 从 Qt Quick WorkerScript 调用 Python 方法

python - PyQt4 文件名对话框