【问题标题】:PyQt Confusion with InheritancePyQt 与继承的混淆
【发布时间】:2016-01-26 10:34:51
【问题描述】:

我尝试组织我的代码,因此将一些东西放入模块中。 我希望主代码部分中的几个变量(例如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()。我怎样才能做到这一点?这可能是一个愚蠢的错误,非常抱歉打扰您!

【问题讨论】:

    标签: python inheritance pyqt qtgui


    【解决方案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)
    

    【讨论】:

    • 谢谢!我知道我搞砸了遗产。对我来说,代码只有在object 用小写字母书写时才有效。
    • Object 是一个错字,应该是 object。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2011-12-30
    • 1970-01-01
    • 2015-10-12
    • 2011-04-25
    相关资源
    最近更新 更多