Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类全局未设置_Python_Qt_Pyqt_Global Variables - Fatal编程技术网

Python类全局未设置

Python类全局未设置,python,qt,pyqt,global-variables,Python,Qt,Pyqt,Global Variables,我有一个包含两个类的Python模块,MainWindow(继承自QMainWindow)和MyView(继承自QGraphicsView)。在MainWindow中,我有一个MyView,它应该在MainWindow类中设置一些变量。 所以我想我只是把对MainWindow对象的引用放入一个全局变量中,让MyView像这样访问它。代码如下: class MyView(QtGui.QGraphicsView): def __init__(self, parent = None):

我有一个包含两个类的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
$./main.py
Gtk消息:加载模块“堪培拉Gtk模块”失败
已分配myapp,值为:
鼠标指针当前悬停在:PyQt4.QtCore.QPoint(172132)
myapp值为:无

为什么会这样?我没有将“myapp”设置为不同的值,在发布的代码中都是它的出现。

您没有在此处查找
全局
关键字。请看一看有关
global
关键字的详细说明

在这种情况下,您只需访问在主模块中创建的全局
myapp
,如下所示:

globals()['myapp']

使用PyQt,还可以使用
parent()
方法

如果使用父级
main窗口定义
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>
打印(myView.parent())
您可以在
MyView
中使用
parent
来访问
main窗口
示例代码非常容易误导,因为它不会产生所述的输出。我想你的代码不能工作的真正原因是因为你试图从主脚本导入。幸运的是,Qt Designer进行了对象实例化,在我的情况下,它做了正确的事情。通过parent()的访问非常有效,谢谢。“globals()['myapp']”在MyView类中也返回“None”。