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