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
返回None
。 QApplication
的初始化尝试遍历参数列表,因为它期望字符串(参数)的 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 程序,但是在哪里可以找到参考文档?