Python 如何列出PyQt的所有子模块及其类?

Python 如何列出PyQt的所有子模块及其类?,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我试图递归列出PyQt5的所有类: PyQt5.QtWidgets PyQt5.QtWidgets.QPushButton PyQt5.QtWidgets.QLabel PyQt5.QtCore PyQt5.QtCore.QPoint and so on... 这就是我现在拥有的: import pkgutil package = __import__('PyQt5') for importer, modname, ispkg in pkgutil.walk_packages(

我试图递归列出PyQt5的所有类:

PyQt5.QtWidgets
PyQt5.QtWidgets.QPushButton
PyQt5.QtWidgets.QLabel
PyQt5.QtCore
PyQt5.QtCore.QPoint
and so on...
这就是我现在拥有的:

import pkgutil

package = __import__('PyQt5')
for importer, modname, ispkg in pkgutil.walk_packages(
        path=package.__path__,
        prefix=package.__name__ + '.',
        onerror=lambda x: None):
    print(modname)
然而,这并没有给出例如
qtwidkets
下的所有类或
QtCore
下的任何内容:

PyQt5.Enginio
PyQt5.Qt
PyQt5.QtBluetooth
PyQt5.QtCore
PyQt5.QtDBus
PyQt5.QtDesigner
PyQt5.QtGui
PyQt5.QtHelp
PyQt5.QtLocation
PyQt5.QtMultimedia
PyQt5.QtMultimediaWidgets
PyQt5.QtNetwork
PyQt5.QtNfc
PyQt5.QtOpenGL
PyQt5.QtPositioning
PyQt5.QtPrintSupport
PyQt5.QtQml
PyQt5.QtQuick
PyQt5.QtQuickWidgets
PyQt5.QtSensors
PyQt5.QtSerialPort
PyQt5.QtSql
PyQt5.QtSvg
PyQt5.QtTest
PyQt5.QtWebChannel
PyQt5.QtWebKit
PyQt5.QtWebKitWidgets
PyQt5.QtWebSockets
PyQt5.QtWidgets
PyQt5.QtX11Extras
PyQt5.QtXml
PyQt5.QtXmlPatterns
PyQt5._QOpenGLFunctions_2_0
PyQt5._QOpenGLFunctions_2_1
PyQt5._QOpenGLFunctions_4_1_Core
PyQt5.uic
PyQt5.uic.Compiler
PyQt5.uic.Compiler.compiler
PyQt5.uic.Compiler.indenter
PyQt5.uic.Compiler.misc
PyQt5.uic.Compiler.proxy_metaclass
PyQt5.uic.Compiler.qobjectcreator
PyQt5.uic.Compiler.qtproxies
PyQt5.uic.Loader
PyQt5.uic.Loader.loader
PyQt5.uic.Loader.qobjectcreator
PyQt5.uic.driver
PyQt5.uic.exceptions
PyQt5.uic.icon_cache
PyQt5.uic.objcreator
PyQt5.uic.port_v2
PyQt5.uic.port_v2.as_string
PyQt5.uic.port_v2.ascii_upper
PyQt5.uic.port_v2.invoke
PyQt5.uic.port_v2.load_plugin
PyQt5.uic.port_v2.proxy_base
PyQt5.uic.port_v2.string_io
PyQt5.uic.port_v3
PyQt5.uic.port_v3.as_string
PyQt5.uic.port_v3.ascii_upper
PyQt5.uic.port_v3.invoke
PyQt5.uic.port_v3.load_plugin
PyQt5.uic.port_v3.proxy_base
PyQt5.uic.port_v3.string_io
PyQt5.uic.properties
PyQt5.uic.pyuic
PyQt5.uic.uiparser
原因似乎是,例如,
QtWidgets
没有
\uuuuu路径\uuuu
属性,因此行走不会进入
QtWidgets


如何递归地检测所有类?

没有必要这样做,因为PyQt已经提供了包含所有相关信息的API文件。这些文件如下所示:

...
PyQt5.QtWidgets.QSpinBox?1(QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.value?4() -> int
PyQt5.QtWidgets.QSpinBox.prefix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setPrefix?4(QString)
PyQt5.QtWidgets.QSpinBox.suffix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setSuffix?4(QString)
PyQt5.QtWidgets.QSpinBox.cleanText?4() -> QString
PyQt5.QtWidgets.QSpinBox.singleStep?4() -> int
PyQt5.QtWidgets.QSpinBox.setSingleStep?4(int)
PyQt5.QtWidgets.QSpinBox.minimum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMinimum?4(int)
PyQt5.QtWidgets.QSpinBox.maximum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMaximum?4(int)
...
>>> os.path.join(QtCore.QLibraryInfo.location(
        QtCore.QLibraryInfo.DataPath), 'qsci/api/python')
>>> '/usr/share/qt/qsci/api/python'
它们应该包含在标准PyQt安装中,但某些平台可能会将它们作为“dev”包的一部分单独安装。它们在系统中的位置如下所示:

...
PyQt5.QtWidgets.QSpinBox?1(QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.value?4() -> int
PyQt5.QtWidgets.QSpinBox.prefix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setPrefix?4(QString)
PyQt5.QtWidgets.QSpinBox.suffix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setSuffix?4(QString)
PyQt5.QtWidgets.QSpinBox.cleanText?4() -> QString
PyQt5.QtWidgets.QSpinBox.singleStep?4() -> int
PyQt5.QtWidgets.QSpinBox.setSingleStep?4(int)
PyQt5.QtWidgets.QSpinBox.minimum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMinimum?4(int)
PyQt5.QtWidgets.QSpinBox.maximum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMaximum?4(int)
...
>>> os.path.join(QtCore.QLibraryInfo.location(
        QtCore.QLibraryInfo.DataPath), 'qsci/api/python')
>>> '/usr/share/qt/qsci/api/python'
这些文件主要用于自动完成和呼叫提示,但当然您可以使用它们做任何您喜欢的事情。部分解释了文件的格式:

从一个或多个文件中读取原始API信息。每个API函数 由包含函数名称的单行文本描述, 后跟函数的可选逗号分隔参数 括在括号中,最后后跟可选的解释性注释 文本

函数名后面可以跟一个“?”和一个数字。号码是 由“自动完成”使用以显示已注册的QPixmap 函数名

“解释性文本”(例如,
->int
)是返回值的类型(如果有),函数名后面的数字映射到以下类型:

类别=1
方法=4
变量=7
枚举=10

如果需要PyQt早期版本的API文件,可以从下载源程序包

附言:


我发现
QtCore
中有一些古怪的ball项在API文件中丢失,即:
pyqtSignal
pyqtProperty
pyqtbundsignal
。不过,如果您需要的话,您可以很容易地自己添加这些内容。

实际上不需要这样做,因为PyQt已经提供了包含所有相关信息的API文件。这些文件如下所示:

...
PyQt5.QtWidgets.QSpinBox?1(QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.value?4() -> int
PyQt5.QtWidgets.QSpinBox.prefix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setPrefix?4(QString)
PyQt5.QtWidgets.QSpinBox.suffix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setSuffix?4(QString)
PyQt5.QtWidgets.QSpinBox.cleanText?4() -> QString
PyQt5.QtWidgets.QSpinBox.singleStep?4() -> int
PyQt5.QtWidgets.QSpinBox.setSingleStep?4(int)
PyQt5.QtWidgets.QSpinBox.minimum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMinimum?4(int)
PyQt5.QtWidgets.QSpinBox.maximum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMaximum?4(int)
...
>>> os.path.join(QtCore.QLibraryInfo.location(
        QtCore.QLibraryInfo.DataPath), 'qsci/api/python')
>>> '/usr/share/qt/qsci/api/python'
它们应该包含在标准PyQt安装中,但某些平台可能会将它们作为“dev”包的一部分单独安装。它们在系统中的位置如下所示:

...
PyQt5.QtWidgets.QSpinBox?1(QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.__init__?1(self, QWidget parent=None)
PyQt5.QtWidgets.QSpinBox.value?4() -> int
PyQt5.QtWidgets.QSpinBox.prefix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setPrefix?4(QString)
PyQt5.QtWidgets.QSpinBox.suffix?4() -> QString
PyQt5.QtWidgets.QSpinBox.setSuffix?4(QString)
PyQt5.QtWidgets.QSpinBox.cleanText?4() -> QString
PyQt5.QtWidgets.QSpinBox.singleStep?4() -> int
PyQt5.QtWidgets.QSpinBox.setSingleStep?4(int)
PyQt5.QtWidgets.QSpinBox.minimum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMinimum?4(int)
PyQt5.QtWidgets.QSpinBox.maximum?4() -> int
PyQt5.QtWidgets.QSpinBox.setMaximum?4(int)
...
>>> os.path.join(QtCore.QLibraryInfo.location(
        QtCore.QLibraryInfo.DataPath), 'qsci/api/python')
>>> '/usr/share/qt/qsci/api/python'
这些文件主要用于自动完成和呼叫提示,但当然您可以使用它们做任何您喜欢的事情。部分解释了文件的格式:

从一个或多个文件中读取原始API信息。每个API函数 由包含函数名称的单行文本描述, 后跟函数的可选逗号分隔参数 括在括号中,最后后跟可选的解释性注释 文本

函数名后面可以跟一个“?”和一个数字。号码是 由“自动完成”使用以显示已注册的QPixmap 函数名

“解释性文本”(例如,
->int
)是返回值的类型(如果有),函数名后面的数字映射到以下类型:

类别=1
方法=4
变量=7
枚举=10

如果需要PyQt早期版本的API文件,可以从下载源程序包

附言:

我发现
QtCore
中有一些古怪的ball项在API文件中丢失,即:
pyqtSignal
pyqtProperty
pyqtbundsignal
。不过,如果您需要的话,您可以很容易地自己添加这些