Python继承模块导入速度

时间:2017-02-13 16:08:30

标签: python python-3.x import pyqt

我要保持这个问题非常普遍,因为我觉得很多人都做同样的事情而我找不到答案。

使用PyQt(4或5)制作程序每个人都需要以下几行:

from PyQt5 import QtCore, QtGui 
from PyQt5.QtWidgets import QWidget

对于某人想要创建的每个小部件,他们需要或多或少地编写这两行。有没有办法(快速)导入所有这些行而不必为每个子窗口小部件导入它们?

为了进一步澄清,我说有一个主要课程MainWindow,可以调用它的子窗口小部件Child

from PyQt5 import QtCore, QtGui 
from PyQt5.QtWidgets import QWidget

from ChildWidget import Child

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        widget1 = Child(self)
        ....

文件ChildWidget将具有类似于

的结构
from PyQt5 import QtCore, QtGui 
from PyQt5.QtWidgets import QWidget

class Child(QWidget):
    def __init__(self, parent):
        super(Child, self).__init__(parent)
....

(当然,每个小部件的导入都会有所不同,但这两个小部件总是在那里。)

我知道ChildWidget代替常规的两次导入,我可以from MainWindow import *导入MainWindow中的所有内容,但我觉得这很慢,因为它很慢循环导入一切?

所以我的问题是,如果速度是一个主要问题,那么在每个小部件中导入相同功能的最佳方式是什么,因为小部件的数量会增加?

1 个答案:

答案 0 :(得分:0)

这些似乎是主要的可能性(忽略微小变化):

  1. 模块命名空间:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    widget = QtWidgets.QWidget()
    
  2. 带别名的模块命名空间:

    from PyQt5 import QtCore as qc, QtGui as qg, QtWidgets as qw
    
    widget = qw.QWidget()
    
  3. 明星进口:

    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    widget = QWidget()
    
  4. 全局命名空间:

    from PyQt5 import Qt
    
    widget = Qt.QWidget()
    
  5. 全球明星导入:

    from PyQt5.Qt import *
    
    widget = QWidget()
    
  6. 个人进口:

    from PyQt5.QtCore import Qt, QTimer
    from PyQt5.QtCore import QColor, QFont
    from PyQt5.QtCore import (
        QApplication, QWidget, QVBoxLayout, QPushButton,
        QLineEdit, QListWidget,
        )
    
  7. 选项3使用数百个永远不会使用的名称来污染模块命名空间,因此generally frowned upon也是如此。选项4看起来很诱人,但是如果你关心你的应用程序的启动时间,这是一个糟糕的解决方案,因为它导入每个模块,包括像QtWebEngine这样的资源。选项5结合了选项3和4的最差方面,但确实可以实现所有

    选项1(以及选项2,在较小程度上)的主要好处是它使得名称来自何处绝对清楚。这意味着它非常适用于教程和示例。额外的清晰度是以更冗长的代价为代价的,但是,如果您的编辑器已经自动完成,那么这不是什么大问题。我的个人偏好是针对选项6,仅仅是因为它似乎是最好的全面妥协。