PyQt 与继承的混淆

PyQt Confusion with Inheritance

我尝试组织我的代码,因此将一些东西放入模块中。 我希望主代码部分中的几个变量,例如 statusBar() 被导入的模块更改。 我做了一个快速的最小工作示例来说明我的意思:

这是我的 main.py:

from PyQt4 import QtGui
import module
import sys

class ApplicationWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self, parent)
        self.statusBar().showMessage("Main window initalized")
        module.Test()

def main():
    app = QtGui.QApplication(sys.argv)
    form = ApplicationWindow()
    form.show()
    app.exec_()

if __name__ == "__main__":
    main()  

这里是module.py:

from PyQt4 import QtGui
class Test(QtGui.QMainWindow):
    def __init__(self):
        super(Test, self).__init__()
        print 'hello'
        self.statusBar().showMessage("Test module called", 6000)

代码打印 "hello" 并且没有抛出任何错误,所以我假设模块已成功导入并且测试已初始化,但它不会以某种方式改变我的 ApplicationWindow 中的 statusBar()。我怎样才能做到这一点?这可能是一个愚蠢的错误,很抱歉打扰你!

Test class 必须参考 ApplicationWindow class。 self.statusBar().showMessage("Test module called", 6000) 将在状态栏上为 Test 的 window 设置一条消息(A window 丢失为空,因为它永远不会可见或分配给任何变量)

ApplicationWindow 的一个实例传递给 Test 将是一种方法来做你想做的事。 Test 也不需要为此从 QtGui.QMainWindow 继承。

from PyQt4 import QtGui
import module
import sys

class ApplicationWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self, parent)
        self.statusBar().showMessage("Main window initalized", 6000)
        module.Test(self)

def main():
    app = QtGui.QApplication(sys.argv)
    form = ApplicationWindow()
    form.show()
    app.exec_()

if __name__ == "__main__":
    main()  



# module.py 

class Test(object):
    def __init__(self, parent):
        print 'hello'
        parent.statusBar().showMessage("Test module called", 6000)