我要保持这个问题非常普遍,因为我觉得很多人都做同样的事情而我找不到答案。
使用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
中的所有内容,但我觉得这很慢,因为它很慢循环导入一切?
所以我的问题是,如果速度是一个主要问题,那么在每个小部件中导入相同功能的最佳方式是什么,因为小部件的数量会增加?
答案 0 :(得分:0)
这些似乎是主要的可能性(忽略微小变化):
模块命名空间:
from PyQt5 import QtCore, QtGui, QtWidgets
widget = QtWidgets.QWidget()
带别名的模块命名空间:
from PyQt5 import QtCore as qc, QtGui as qg, QtWidgets as qw
widget = qw.QWidget()
明星进口:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
widget = QWidget()
全局命名空间:
from PyQt5 import Qt
widget = Qt.QWidget()
全球明星导入:
from PyQt5.Qt import *
widget = QWidget()
个人进口:
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtCore import QColor, QFont
from PyQt5.QtCore import (
QApplication, QWidget, QVBoxLayout, QPushButton,
QLineEdit, QListWidget,
)
选项3使用数百个永远不会使用的名称来污染模块命名空间,因此generally frowned upon也是如此。选项4看起来很诱人,但是如果你关心你的应用程序的启动时间,这是一个糟糕的解决方案,因为它导入每个模块,包括像QtWebEngine
这样的资源。选项5结合了选项3和4的最差方面,但确实可以实现所有。
选项1(以及选项2,在较小程度上)的主要好处是它使得名称来自何处绝对清楚。这意味着它非常适用于教程和示例。额外的清晰度是以更冗长的代价为代价的,但是,如果您的编辑器已经自动完成,那么这不是什么大问题。我的个人偏好是针对选项6,仅仅是因为它似乎是最好的全面妥协。