我正在尝试编写一个带有 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/