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

时间:2017-08-31 08:28:43

标签: 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(
        path=package.__path__,
        prefix=package.__name__ + '.',
        onerror=lambda x: None):
    print(modname)

然而,这并没有给我QtWidgets下的所有课程或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没有__path__属性,因此行走不会进入QtWidgets

如何递归检测所有类?

1 个答案:

答案 0 :(得分:0)

没有必要这样做,因为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)
...

它们应该包含在标准的PyQt安装中,但是某些平台可能会单独安装它们作为" dev"包。它们在您系统上的位置可以这样找到:

>>> os.path.join(QtCore.QLibraryInfo.location(
        QtCore.QLibraryInfo.DataPath), 'qsci/api/python')
>>> '/usr/share/qt/qsci/api/python'

这些文件主要供QScintilla用于其自动完成和通话提示,但当然您可以随意使用它们。部分解释了文件的格式here

  

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

     

函数名后跟一个`?'和一个数字。这个数字是   自动完成用于显示已注册的QPixmap   功能名称。

"解释性文字" (例如-> int)是返回值的类型(如果有的话),函数名称后的数字映射到这些类型:

  

等级= 1
  方法= 4
  变量= 7
  Enum = 10

如果您想要早期版本的PyQt的API文件,可以从here下载源包。

PS:

我发现QtCore中有一些奇怪的项目在API文件中缺失,即:pyqtSignalpyqtPropertypyqtBoundSignal。但是,如果你需要它们,很容易自己添加它们。

相关问题