Python类全局未设置
我有一个包含两个类的Python模块,MainWindow(继承自QMainWindow)和MyView(继承自QGraphicsView)。在MainWindow中,我有一个MyView,它应该在MainWindow类中设置一些变量。 所以我想我只是把对MainWindow对象的引用放入一个全局变量中,让MyView像这样访问它。代码如下: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):
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”。