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 - 导入语句的正确位置的主要内容,如果未能解决你的问题,请参考以下文章