PyQt - 导入语句的正确位置

Posted

技术标签:

【中文标题】PyQt - 导入语句的正确位置【英文标题】:PyQt - Correct Position Of Import Statements 【发布时间】:2015-01-17 18:25:47 【问题描述】:

鉴于隔离/组织代码,我迷失了最佳方法。下面的工作,在 MainWindow 实例化之后使用 app.py 导入,但这会产生后续问题,因为我看不出还有其他事情可以完成(在 MainWindow 实例化之后放置导入显然会从格式化中给出'main not found' .py)。

app.py

from PyQt4.QtCore import *; from PyQt4.QtGui import *; from PyQt4.uic import *; from PyQt4.QtSql import *
app = QApplication(sys.argv)

class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMaximumSize(500,500); self.showMaximized()

    def test(self):
        print self.sender()

main = Main()
main.show()

from ui.formatting import *

格式化.py

from PyQt4.QtCore import *; from PyQt4.QtGui import *; from PyQt4.uic import *; from PyQt4.QtSql import *
from app import main

class LineEdit(QLineEdit): 
    def __init__(self):
        QLineEdit.__init__(self)

        self.setParent(main)
        self.show()   

        self.textChanged.connect(main.test)


lineEdit = LineEdit()

非常感谢

【问题讨论】:

您通常使用了太多的全局变量。使用更多的方法参数。然后,导入语句几乎会自动到达您需要它们的地方。基本上,formatting.py 没有理由依赖 main.py。另见***.com/questions/193919/… 或***.com/questions/6011322/…。 【参考方案1】:

您不应该依赖在导入发生时实例化的对象(好吧,有几次您可能想要这样做,但这种情况很少见)。

通常,您应该使用 import 语句来导入模块、类和/或函数。如果导入的模块/类/函数需要从另一个导入(或从您的主脚本)访问某些内容,那么您应该在使用/实例化/调用所述模块/类/函数时显式传递它。

所以你的例子变成了:

formatting.py

from PyQt4.QtCore import *; from PyQt4.QtGui import *; from PyQt4.uic import *; from PyQt4.QtSql import *

class LineEdit(QLineEdit): 
    def __init__(self, main):
        QLineEdit.__init__(self)

        self.setParent(main)
        self.show()   

        self.textChanged.connect(main.test)

app.py

from PyQt4.QtCore import *; from PyQt4.QtGui import *; from PyQt4.uic import *; from PyQt4.QtSql import *
from ui.formatting import *

class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMaximumSize(500,500); self.showMaximized()

    def test(self):
        print self.sender()


app = QApplication(sys.argv)
main = Main()
lineedit = LineEdit(main)
main.show()

当然,这是一个人为的例子,因为在 app.py 中设置父级并与您的QLineEdit 建立连接更有意义。例如:

lineedit = LineEdit()
lineedit.setParent(main)
lineedit.textChanged.connect(main.test)

然后在这种情况下,您根本不需要子类化 QLineEdit

【讨论】:

以上是关于PyQt - 导入语句的正确位置的主要内容,如果未能解决你的问题,请参考以下文章

Python 导入错误:没有名为“PyQt4”的模块

可以从不同位置调用脚本时如何编写导入语句?

这是在 Jquery 中使用此语句的正确位置吗

Sqoop 导入语句

Python import导入模块

使用 LIKE (pyqt5) 在 mysql 中选择语句