Python类全局未设置



我有一个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']

相关内容

  • 没有找到相关文章

最新更新