子飞鱼 发表于 2023-11-13 11:29:30

为什么会报错?怎么解决?

本帖最后由 子飞鱼 于 2023-11-13 11:30 编辑

请各位大神给看看下面的代码为什么运行出错:
    defshowFileDialog(self):
      options = QFileDialog.Options()
      options |= QFileDialog.DontUseNativeDialog
      fileName, _ = QFileDialog.getSaveFileName(self, "保存", "", "文本文件 (*.txt)", options=options)
      if fileName:
            with open(fileName, 'w') as file:
                file.write(f'{self.ui.result.toPlainText()}')
            print("选择的文件路径:", fileName)

其中:self.ui.result.toPlainText() 是我定义的一个QPlainText,作为输出计算结果的地方,想用上面的函数把输出再 QPlainText上的内容保存成txt文件

执行后 在fileName, _ = QFileDialog.getSaveFileName(self, "保存", "", "文本文件 (*.txt)", options=options) 这行报错,
报错内容是:
fileName, _ = QFileDialog.getSaveFileName(self, "保存", "", "文本文件 (*.txt)", options=options)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'PySide6.QtWidgets.QFileDialog.getSaveFileName' called with wrong argument types:
PySide6.QtWidgets.QFileDialog.getSaveFileName(jiemian, str, str, str)
Supported signatures:
PySide6.QtWidgets.QFileDialog.getSaveFileName(PySide6.QtWidgets.QWidget, Optional = None, str = '', str = '', str = '', PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options))

jiemian是我定义的类名字

isdkz 发表于 2023-11-13 11:29:35

问题出在你调用 QFileDialog.getSaveFileName 方法时传入的参数类型不正确。根据报错信息, getSaveFileName 方法接受的第一个参数应该是 PySide6.QtWidgets.QWidget 类型,而你传入的是 jiemian ,这是你定义的类名。因此,你需要将 self 改为你的窗口类的实例对象,确保传入的参数类型正确。

你需要将代码修改为如下所示:

fileName, _ = QFileDialog.getSaveFileName(self.window(), "保存", "", "文本文件 (*.txt)", options=options)


这样就能正确调用 getSaveFileName 方法了。

Mike_python小 发表于 2023-11-13 11:31:27

根据您提供的代码和报错信息,问题出在调用 QFileDialog.getSaveFileName 方法时传入的参数类型错误。

QFileDialog.getSaveFileName 方法的第一个参数应该是 PySide6.QtWidgets.QWidget 类型,而您传入了自定义类 jiemian。jiemian 可能是您定义的窗口类。

解决方法是将 self 作为第一个参数传入该方法,因为 self 应该是 PySide6.QtWidgets.QWidget 的实例。请确保您的窗口类继承自 PySide6.QtWidgets.QWidget。

修改后的代码应该是这样的:

fileName, _ = QFileDialog.getSaveFileName(self, "保存", "", "文本文件 (*.txt)", options=options)


另外,您可能还需要确保已经正确导入了 QFileDialog 类。

请注意,我并不是 ChatGPT,而是基于浙大、清华等中国开源大模型的 AI 机器人。我会尽力回答您的问题,并给出全面、有条理的答案。如果您还有其他问题,请随时提问。

子飞鱼 发表于 2023-11-13 11:46:33

isdkz 发表于 2023-11-13 11:29
问题出在你调用 QFileDialog.getSaveFileName 方法时传入的参数类型不正确。根据报错信息, getSaveFileNam ...

按照您的说方法进行了更改,还是有问题
具体的报错如下:
fileName, _ = QFileDialog.getSaveFileName(self.window(), "保存", "", "文本文件 (*.txt)", options=options)
                                              ^^^^^^^^^^^
AttributeError: 'jiemian' object has no attribute 'window'

子飞鱼 发表于 2023-11-13 11:48:22

Mike_python小 发表于 2023-11-13 11:31
根据您提供的代码和报错信息,问题出在调用 QFileDialog.getSaveFileName 方法时传入的参数类型错误。

QFi ...

我目前的代码就是跟你提供的一样,但是报错。
您提到的请确保您的窗口类继承自 PySide6.QtWidgets.QWidget。
我是这样的: from PySide6.QtWidgets import QFileDialog

子飞鱼 发表于 2023-11-13 12:05:15

isdkz 发表于 2023-11-13 11:29
问题出在你调用 QFileDialog.getSaveFileName 方法时传入的参数类型不正确。根据报错信息, getSaveFileNam ...

经过我调整,可以运行了
我的jiemian 是类的名字
用的是Qtdesigner做的程序画面
self.ui = QUiLoader().load('yusheji.ui')
'yusheji.ui 就i是我用Qtdesigner做的程序画面
所以将代码更改为:
fileName, _ = QFileDialog.getSaveFileName(self.ui.window(), "保存", "", "文本文件 (*.txt)", options=options)
就没问题了。 我之前对于问题的描述有欠缺,导致各位大神给我的方案我直接套用还是不行。
页: [1]
查看完整版本: 为什么会报错?怎么解决?