PyQt与继承混淆

时间:2016-01-26 10:34:52

标签: python inheritance pyqt qtgui

我尝试组织我的代码,因此将一些东西放入模块中。 我希望主代码部分中的几个变量(例如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"并且不会给我任何错误,所以我假设模块已成功导入并且Test已初始化,但它不会以某种方式改变ApplicationWindow中的statusBar()。我怎样才能做到这一点?这可能是一个愚蠢的错误,所以提前抱歉打扰你!

1 个答案:

答案 0 :(得分:1)

Test类必须引用ApplicationWindow类。 self.statusBar().showMessage("Test module called", 6000)将在Test窗口的状态栏上设置一条消息(由于永远不会显示或分配给任何变量而失去空白的窗口)

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)