【问题标题】:Confused with PyQt5 QFileDialog对 PyQt5 QFileDialog 感到困惑
【发布时间】:2019-10-05 00:23:24
【问题描述】:

我正在尝试使用 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~

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

【问题讨论】:

    标签: python pyqt5 qfiledialog


    【解决方案1】:
    • 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_())
    

    【讨论】:

    • 非常感谢!我认为是这种情况,但我无法找到正确的编码方法。我尝试了几个不同的选项,但都失败了。
    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    • 2023-03-08
    • 2019-08-04
    • 2019-12-30
    • 2022-01-20
    相关资源
    最近更新 更多