我有一个Python模块,它有两个类,MainWindow(继承自QMainWindow)和MyView(继承自QGraphicsView)。在MainWindow中,我有一个MyView,它应该在MainWindow类中设置一些变量。所以我想我只是把对MainWindow对象的引用放在一个全局变量中,让MyView这样访问它。这是代码:
class MyView(QtGui.QGraphicsView):
def __init__(self, parent = None):
super(MyView, self).__init__(parent)
def mousePressEvent(self, event):
super(MyView, self).mousePressEvent(event)
print "Mouse Pointer is currently hovering at: ", event.pos()
global myapp
print "myapp value is: ", myapp
myapp = None
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MainWindow()
print "myapp assigned, value is: ", myapp
myapp.show()
sys.exit(app.exec_())
点击MyView后,程序输出如下:
$ ./main.py
Gtk-Message: Failed to load module "canberra-gtk-module"
myapp assigned, value is: <__main__.MainWindow object at 0x7fc29e1ed640>
Mouse Pointer is currently hovering at: PyQt4.QtCore.QPoint(172, 132)
myapp value is: None
为什么会这样?我没有将"myapp"设置为不同的值,在发布的代码中都是它的出现。
使用PyQt,您还可以使用parent()
方法。
如果用父MainWindow
:定义MyView
# either in __main__
myapp = MainWindow()
myview= MyView(myapp)
# or in the class MainWindow
self.myView=MyView(self)
然后myview.parent()
允许您访问myapp
>>> print(myView.parent())
<__main__.MainWindow object at 0x7f02869b2678>
您没有在此处查找global
关键字。看看这篇文章,可以看到关于global
关键字的一个很好的解释。
在这种情况下,您只需要访问在主模块中创建的全局myapp
,如下所示:
globals()['myapp']