pycharm 使用 pyside2 TypeError:'NoneType' 对象不可调用

Posted

技术标签:

【中文标题】pycharm 使用 pyside2 TypeError:\'NoneType\' 对象不可调用【英文标题】:pycharm use pyside2 TypeError: 'NoneType' object is not callablepycharm 使用 pyside2 TypeError:'NoneType' 对象不可调用 【发布时间】:2019-11-19 01:44:33 【问题描述】:
# -*- coding:utf-8 -*-
import sys
from PySide2.QtWidgets import QApplication, QLabel
print(sys.argv)
if __name__ == '__main__':
    dates = QApplication(sys.argv)
    label = QLabel('hello world')
    label.show()
    sys.exit(dates.exec_())

错误

['E:/MayaTool/glTools/test.py']
Traceback (most recent call last):
  File "E:/MayaTool/glTools/test.py", line 6, in <module>
    dates = QApplication(sys.argv)
TypeError: 'NoneType' object is not callable

** 此代码使用自己的编辑器在 python 中运行,但在 Pycharm 中出现问题。有什么问题? **

【问题讨论】:

你是说当你在 IDLE 中逐字复制和粘贴代码而不是在 PyCharm 中时它会运行? 您使用的是什么特定版本的 pycharm?尝试升级到最新版本 - 或者如果您正在使用该版本,请尝试降级到早期版本 - 并检查问题是否仍然存在。 【参考方案1】:

您可能已将 PyMel 的 MayaDevKit 代码编译添加到您的环境中,其中包含 PySide2 替身。删除它应该可以解决您的问题。

【讨论】:

我猜你的意思是“代码完成”。有同样的问题。我将 maya devkit 完成添加到解释器路径中。因此,当使用 mayapy.exe 解释器通过 PyCharm 运行它时,它使用这些路径来查找返回空类的 QApplication。正如 Eoyilmaz 所说,只需将其从解释器路径中删除即可。【参考方案2】:

正如here 所见,QApplication 类的初始化接受了在运行 Python 脚本时作为sys.argv 传递的参数。正如您所怀疑的,当在 IDLE 中运行时,会向程序传递参数,但在 PyCharm 中没有传递 (0) 参数,因此sys.argv 返回NoneQApplication 的初始化尝试遍历参数列表,因为它期望字符串(参数)的 list

一个简单的解决方法是检查sys.argv 是否为None,例如

# -*- coding:utf-8 -*-
import sys
from PySide2.QtWidgets import QApplication, QLabel
print(sys.argv)
if __name__ == '__main__':
    if sys.argv is None:
        sys.argv = []
    dates = QApplication(sys.argv)
    label = QLabel('hello world')
    label.show()
    sys.exit(dates.exec_())

【讨论】:

一行:QApplication(sys.argv or []) 这毫无意义。为什么sys.argv 永远是None?它should always be 至少['']。 pyside/pyqt 也没有理由尝试将传入的参数视为可调用的。这似乎更有可能是由 pycharm 中的错误引起的 - 可能与 this issue 有关。 要明确一点:在 PyQt5 或 PySide2 中执行 QApplication(None) 不会引发问题中显示的异常。

以上是关于pycharm 使用 pyside2 TypeError:'NoneType' 对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章

我在 Pycharm 中使用 PySide2 来构建我的 GUI 程序,但是在哪里可以找到参考文档?

无法导入 PySide2

导入 PySide2 时 DLL 加载失败,仅在调试时

PySide2 QMainWindow()捆绑在PyInstaller中后无法呈现[重复]

Pycharm 检查未标记从存根对象继承的类中未解析的引用

在 PyCharm 中键入提示特定模块